gdb调试pdf

所需积分/C币:9 2018-05-13 17:32:19 416KB PDF
2
收藏 收藏
举报

介绍gdb调试过程和方法。gdb调试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Therc is NO WARRANTY, to the extent permitted by law. Type show copying and " show warranty for details This GDB was configured as 1486-linux-gnu gab) g选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中 第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可 执行文件屮,所以在调试时必须保证gb能找到源文件。gcb提供一个 类似的命令行环境,上亩的(gdb)就是提示符,在这个提示符下输 入help可以查看命令的类别: gab) help List of classes of commands aliases Aliases of other commands oreakpoints-- Making program stop at certain points data - examining data les -- Specifying and examining files internals - Maintenance commands obscure Obscure features runnIng Running the program tack Examining the stack status - Status inquiries support Support facilities tracepoints Tracing of program execution without stopping the program user-defined - Uscr-dcfincd commands Type help" followed by a class name for a list of commands in that class Type help all" for the list of all commands Type help" followed by command name for full documentation Type apropos word" to search for commands related to Command name abbreviations are allowed if unambiguous 也可以进一步查看某一类别中有哪些命令,例如查看 files类别下有哪 些命令可用: (gab) help files Specifying and examining files List of commands add-shared-symbcl-files - Load the symbols from shared objects in the dynamic linker's link map add-symbol-file - Load symbols from FILE add-symbol-file-from-memory - lcad the symbols cut of memory from a dynamically loaded object file cd - set working directory to DiR for debugger and program being debugged core-filc - Use FIle as core dump for examining memory nd registers directory Add directory dir to beginning of scarch path for sour files edit - Edit specified file or iunct exec-file - Use FIlE as program for getting contents of pure memory file Use File as program to be debugged forward-search - Search icr regular expression (see egex(3)) from last line listed generate-core file with th ent state of the debugged process list List specified function cr line 现在试试用1st命令从第一行廾始列出源代码: (gab) list 1 1 include <stdio. h: 3int add range(int low, int high int i sum ( hi gh sum sum li return sum; 10 一次只列行,如果要从第行开始继续列源代码可以输入 ( gab) list 也可以什么都不输直接敲回车,gd提供了一个很方便的功能,在提示 符下直接敲回车表示重复上一条命令。 (gdb)(直接回车) 11 int main(void) 12 int result[100] 14 result [o] add range(1, 10)i 15 result[1]= add range(1, 1CC 16 printf("result[o]=d\aresult[l]=d\n" result[o result[1])i 17 return oi 18 gdb的很多常用命令有简写形式,例如list命令可以写成1,要列一个 函数的源代码也可以用函数名做参数 (gdb) 1 add range 1 include <stdio.h> 3 int add range(int low, int high int i, sum for (i=low; i <=highi 1++) sum return sum 10 现在退出gdb的环境 (gdb)qu⊥t 我们做一个实验,把源代码改名或移到别处再用gdb调试,这样就列不 出源代码了 s my main. c mian. c ( gab) 5 main. C: No such file or directory. In ma n C 可见gec的-g选项并不是把源代码嵌入到可执行文件中的,在调试时也 需要源文件。现在把源代码恢复原样,我们继续调试。首先用 start命 令开始执行程序: ° gdb mai (gdb)star Breakpoint 1 at Cx80483ad: file main. C, linc 14 tarting program: /home/akaedu/main main at main. C: 1 4 esult[o] add range(1, 10)i (gdb) gdb停在main函数中变量定义之后的第一条语句处等待我们发命令,gdb 列出的这条语句是即将执行的下一条语句。我们可以用nx命令(简写 为n)控制这些语句一条一条地执行: 15 result[1] add range(l, 1CC (gdb)(直接回车) printf("result[o]=od\result[1]=&d\n result[o] result[1]) (gdb)(直接回车) result[0]=55 result[1]=5105 return O 用n命令依次执行两行赋值语句和一行打印语句,在执行打印语句时结 果立刻打岀来了,然后停在 return语句之前等待我们发命令。虽然我们 完全控制了程序的执行,但仍然看不出哪里错了,因为错误不在main 函数中而在 add range函数中,现在用 start命令重新来过,这次用step 命令(简写为s)钻进 add range函数中去跟踪执行: ( gab) start The program being debugged has been started already start it from the beginning:(y cr n)y Breakpoint 2 at 0x80483ad: file main Cr line 14 Starting program: /home/akaedu/main main o at main.C: 14 14 result [0] add range(1, 1) (gdb)s add range (low=l, high=10)at main. C: 6 for low < higl ++) 这次停在了 add range函数中变量定义之后的第一条语句处。在函数中 有儿种查看状态的办法, backtrace命令(简写为bt)可以查看函数调 用的栈帧: (gdb)ot #0 add range (low=l, high=10)at main. C: 6 f1 0x080183c1 in main at main. c: 141 可见当前的 add range函数是被main函数调用的,main传进米的参数是 low=-l,high-=10。main函数的栈帧编号为, add range的栈帧编号为。 现在可以用info命令(简写为i)查看 add range函数局部变量的值: (gdb) i locals 0 如果想査看main函数当前局部变量的值也可以做到,先用 frame命令(简 写为f)选择号栈帧然后再查看局部变量: (gdb)f 1 #1 0x080483c1 in main ( at main. c: 1 4 result[o= add range(1, 10)i (gdb) i locals result={C,0,C,0,0,0,134513196,225011984 1208685768,-1081160480 1208623680} 注意到 result数组中有很多元素具有杂乱无章的值,我们知道未绘初始 化的局部变量具有不确定的值。到目前为止一切正常。用s或n往下走 几步,然后用 print命令(简写为p)打印出变量sum的值 (gdb) (9db)(直接回车) for low <= high; 1++) (gdb)(直接回车) m sum+ 1 (gdb)(直接回车) for (i =low highi ( gab)p s

...展开详情
试读 37P gdb调试pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚积分or赚钱
    最新推荐
    gdb调试pdf 9积分/C币 立即下载
    1/37
    gdb调试pdf第1页
    gdb调试pdf第2页
    gdb调试pdf第3页
    gdb调试pdf第4页
    gdb调试pdf第5页
    gdb调试pdf第6页
    gdb调试pdf第7页
    gdb调试pdf第8页

    试读结束, 可继续读4页

    9积分/C币 立即下载 >