作者beagle1 (;;;;;)
看板b92902xxx
标题GDB 的简单用法
时间Sun Oct 5 01:27:05 2003
我知道大家没有兴趣学 gdb 的一些特异功能, 什麽远端连线debug的...
所以这篇焦点放在几个最简单的用法, 希望对第三使徒有帮助...
(第三使徒到底是谁? 总觉得跟什麽 eva 有关... )
debug 前准备:
1. source code: 这个我想大家都有 (废话)
debug 时 gdb 会显示对应的 source code 给你看, 所以一定要有 source
2. compile 时, 要给 gcc -g 的参数, 他会做出含 debug 资讯的执行档 (超大)
最好不要加 -O 或 -O2 的 optimize 选项, 如果加了偶而会出槌...
执行 gdb:
$ gdb aa <-- aa 是我写的程式
从 main() 开始侦错, 把他设为 break point
(gdb) break main
Breakpoint 1 at 0x8048338: file aa.c, line 6.
接着就可以跑了
(gdb) run
Starting program: /home/beagle/Program/test/aa
Breakpoint 1, main () at aa.c:6
6 printf("%x\n", &aaa);
会跑到 main 之後的第一行停下来, 然後你可以慢慢逐行执行了...
没耐心的话, 设另一个 breakpoint, 然後用 continue 指令让他快跑...
* * *
几个指令:
quit 离开gdb, 按 Ctrl-C 也是可以滴...
break 设 breakpoint...
break 6 在第六行 break
break ftest 在 ftest() 这个 function 的第一行 break
break aa.c:6 或 break aa.c:ftest
也可以指定哪个档的哪一行哪个 function 停下来, 如果你写了好几个.c
break ... if (状况) break 後面可以加 if 判断要不要停
tbreak 和 break 用法一样, 但是只 break 一次就失效了...
next 或 n 执行下一行, 遇到 function call 会 step over
step 或 s 执行下一行, 但是遇到 function call 会 step into function 里面
next 和 step 的分别是一个会把整个 function 当成一行一次执行完,
另一个则会追踪到 function 里面去, 大致上是差不多的指令...
run 或 r 从头开始执行程式直到被 break 或执行完毕才会停下...
continue 或 c 被 break 之後, 用 continue 继续跑下去...
print [变数] 把变数的内容印出来看看... print 用法很多...
watch [变数] 把变数设为 watchpoint, 每次程式 break (或在step时)都会印出
变数值省得一直打 print , 变数有改变时会自动 break ...
不瞒各位, 我就只会这一点点, 一直蒙混到现在... @.@
详细的说明书在工作站打 info gdb 有详细解说...
其实 info 有 web 介面, 我习惯用 WWW 看 info pages, 可是不知道217有没有装?
用 google 找到这一页:
http://uw713doc.sco.com/cgi-bin/info2html?(gdb.info)Top&lang=en
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.161.7.70