⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000002.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;TJB&nbsp;(老六),&nbsp;信区:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;GDB&nbsp;(2)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木调试站&nbsp;(Tue&nbsp;Jun&nbsp;&nbsp;2&nbsp;15:58:26&nbsp;1998)&nbsp;<BR>&nbsp;<BR>发&nbsp;信&nbsp;人:System_Killer(大家一起来发呆)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;信区名称:Linux[4614]&nbsp;<BR>信件提要:gdb(二)&nbsp;<BR>原发信站:中国科大BBS站(Sat,&nbsp;28&nbsp;Mar&nbsp;1998&nbsp;22:28:43)&nbsp;<BR>&nbsp;<BR>这里是GDB的一个例子:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;原文中是使用一个叫m4的程序。但很遗憾我找不到这个程序的原代码,&nbsp;<BR>所以没有办法来按照原文来说明。不过反正是个例子,我就拿一个操作系统的&nbsp;<BR>进程调度原码来说明把,原代码我会附在后面。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先这个程序叫os.c是一个模拟进程调度的原程序(也许是个老古董了:-))。&nbsp;<BR>先说明一下如何取得包括原代码符号的可执行代码。大家有心的话可以去看一下gcc的&nbsp;<BR>man文件(在shell下打man&nbsp;gcc)。gcc&nbsp;-g&nbsp;&lt;原文件.c&gt;&nbsp;-o&nbsp;&lt;要生成的文件名&gt;&nbsp;<BR>-g&nbsp;的意思是生成带原代码调试符号的可执行文件。&nbsp;<BR>-o&nbsp;的意思是指定可执行文件名。&nbsp;<BR>(gcc&nbsp;的命令行参数有一大堆,有兴趣可以自己去看看。)&nbsp;<BR>反正在linux下把os.c用以上方法编译连接以后就产生了可供gdb使用的可执行文件。&nbsp;<BR>我用gcc&nbsp;-g&nbsp;os.c&nbsp;-o&nbsp;os,产生的可执行文档叫os.&nbsp;<BR>然后打gdb&nbsp;os,就可进入gdb,屏幕提示:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GDB&nbsp;is&nbsp;free&nbsp;software&nbsp;and&nbsp;you&nbsp;are&nbsp;welcome&nbsp;to&nbsp;distribute&nbsp;copies&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;it&nbsp;under&nbsp;certain&nbsp;conditions;&nbsp;type&nbsp;&quot;show&nbsp;copying&quot;&nbsp;to&nbsp;see&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;conditions.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;is&nbsp;absolutely&nbsp;no&nbsp;warranty&nbsp;for&nbsp;GDB;&nbsp;type&nbsp;&quot;show&nbsp;warranty&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;details.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GDB&nbsp;4.16,&nbsp;Copyright&nbsp;1995&nbsp;Free&nbsp;Software&nbsp;Foundation,&nbsp;Inc...&nbsp;<BR>&nbsp;(gdb)&nbsp;<BR>&nbsp;&nbsp;(gdb)是提示符,在这提示符下可以输入命令,直到退出。(退出命令是q/Q)&nbsp;<BR>为了尽量和原文档说明的命令相符,即使在本例子中没用的命令我也将演示。&nbsp;<BR>首先我们可以设置gdb的屏幕大小。键入:&nbsp;<BR>&nbsp;(gdb)set&nbsp;width&nbsp;70&nbsp;<BR>就是把标准屏幕设为70列。&nbsp;<BR>&nbsp;&nbsp;然后让我们来设置断点。设置方法很简单:break或简单打b后面加行号或函数名&nbsp;<BR>比如我们可以在main&nbsp;函数上设断点:&nbsp;<BR>&nbsp;(gdb)break&nbsp;main&nbsp;<BR>或(gdb)b&nbsp;main&nbsp;<BR>&nbsp;系统提示:Breakpoint&nbsp;1&nbsp;at&nbsp;0x8049552:&nbsp;file&nbsp;os.c,&nbsp;line&nbsp;455.&nbsp;<BR>&nbsp;然后我们可以运行这个程序,当程序运行到main函数时程序就会停止返回到gdb的&nbsp;<BR>提示符下。运行的命令是run或r(gdb中有不少alias,可以看一下help,在gdb下打help)&nbsp;<BR>run&nbsp;后面可以跟参数,就是为程序指定命令行参数。&nbsp;<BR>比如r&nbsp;abcd,则程序就会abcd以作为参数。(这里要说明的是可以用set&nbsp;args来指定参&nbsp;<BR>数)。打入r或run后,程序就开始运行直到进入main的入口停止,显示:&nbsp;<BR>Starting&nbsp;program:&nbsp;&lt;路径&gt;/os&nbsp;<BR>&nbsp;<BR>Breakpoint&nbsp;1,&nbsp;main&nbsp;()&nbsp;at&nbsp;os.c:455&nbsp;<BR>455&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initial();&nbsp;<BR>这里455&nbsp;Initial();是将要执行的命令或函数。&nbsp;<BR>gdb提供两种方式:1.单步进入,step&nbsp;into就是跟踪到函数内啦。命令是step或s&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.单步,next,就是简单的单步,不会进入函数。命令是next或n&nbsp;<BR>这两个命令还有别的用法以后再说。&nbsp;<BR>我们用n命令,键入:&nbsp;<BR>(gdb)n&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;1&nbsp;,pid&nbsp;is&nbsp;31474&nbsp;<BR>&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;2&nbsp;,pid&nbsp;is&nbsp;31475&nbsp;<BR>&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;3&nbsp;,pid&nbsp;is&nbsp;31476&nbsp;<BR>&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;4&nbsp;,pid&nbsp;is&nbsp;31477&nbsp;<BR>&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;5&nbsp;,pid&nbsp;is&nbsp;31478&nbsp;<BR>&nbsp;<BR>Success&nbsp;forking&nbsp;process#&nbsp;6&nbsp;,pid&nbsp;is&nbsp;31479&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dispatching&nbsp;Algorithm&nbsp;:&nbsp;FIFO&nbsp;<BR>********************************************************************************&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCB#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Priority&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31474&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31475&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31476&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31477&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31478&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31479&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WAITING&nbsp;<BR>&nbsp;<BR>******************************************************************************&nbsp;<BR>&nbsp;<BR>CPU&nbsp;&nbsp;:&nbsp;&nbsp;NO&nbsp;process&nbsp;running&nbsp;<BR>IO&nbsp;:&nbsp;&nbsp;No&nbsp;process&nbsp;<BR>Waiting&nbsp;CPU!!!&nbsp;&nbsp;31474&nbsp;&nbsp;&nbsp;31475&nbsp;&nbsp;&nbsp;31476&nbsp;&nbsp;&nbsp;31477&nbsp;&nbsp;&nbsp;31478&nbsp;&nbsp;&nbsp;31479&nbsp;<BR>Waiting&nbsp;&nbsp;IO&nbsp;&nbsp;&nbsp;&nbsp;NONE&nbsp;<BR>456&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;State=WAITING;&nbsp;<BR>最后的一行就是下一句要执行的命令。我们现在在另一个函数上加断点。注意我们&nbsp;<BR>可以用l/list命令来显示原代码。这里我们键入&nbsp;<BR>(gdb)l&nbsp;<BR>451&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main()&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -