时间:2021-07-01 10:21:17 帮助过:16人阅读
------------------------------------------------------------------------
1、编译并运行程序
使用 ‘gcc -g eg2.c -o eg2‘ 编译该程序并使用 ‘./eg2 &‘ 运行该程序。请留意在启动该程序时在背景上打印的进程标识,在本例中是 1283:
------------------------------------------------------------------------
./eg2 &
[3] 1283
------------------------------------------------------------------------
2、发起连接
连接到进程: ‘gdb [被调试文件] -c [进程号]‘ ,也可以不要 -c。
启动 gdb 并指定进程标识,在我举的这个例子中是 ‘gdb eg2 1283‘。gdb 会查找一个叫作 "1283" 的 core 文件。如果没有找到,那么只要进程 1283 正在运行(在本例中可能在 sleep() 中),gdb 就会连接并中断该进程:
------------------------------------------------------------------------
...
/home/seager/gdb/1283: No such file or directory.
Attaching to program: /home/seager/gdb/eg2, Pid 1283
...
0x400a87f1 in __libc_nanosleep () from /lib/libc.so.6
(gdb)
------------------------------------------------------------------------
3、gdb调试( gdb 命令或堆栈命令来查看调试信息)
此时,可以发出所有常用 gdb 命令。可以使用 ‘backtrace‘ 来查看当前位置与 main() 的相对关系,以及 mian() 的帧号是什么,然后切换到 main() 所在的帧,查看已经在 "for" 循环中运行了多少次:
------------------------------------------------------------------------
(gdb) backtrace
#0 0x400a87f1 in __libc_nanosleep () from /lib/libc.so.6
#1 0x400a877d in __sleep (seconds=1) at ../sysdeps/unix/sysv/linux/sleep.c:78
#2 0x80483ef in main (argc=1, argv=0xbffff9c4) at eg2.c:7
(gdb) frame 2
#2 0x80483ef in main (argc=1, argv=0xbffff9c4) at eg2.c:7
7 sleep(1);
(gdb) print i
$1 = 50
------------------------------------------------------------------------
4、调试完、断开连接等
detach / kill:输入‘detach‘ or ‘kill‘,不需要进程号。
如果已经完成了对程序的修改,可以 ‘detach‘ 命令继续执行程序,或者 ‘kill‘ 命令杀死进程。
attach:先输入‘file eg2‘,然后输入‘attach 1283‘
还可以首先使用 ‘file eg2‘ 装入文件,然后发出 ‘attach 1283‘ 命令连接到进程标识 1283 下的 eg2。
转自:http://blog.csdn.net/azr22005/article/details/6927420
http://www.cppblog.com/BlueSky/archive/2007/11/20/37012.html
http://hi.baidu.com/andrewhome/blog/item/bb90fadf09b43a1049540326.html
第一部分牛刀小试:启动GDB开始调试
标签:www 编译 source 一点 操作 rom cto .so sel