GDB使用

来源:互联网 发布:vmware上的mac补丁 编辑:程序博客网 时间:2024/06/05 17:22

系统启动


使用GDB调试程序前,编译时最好打开调试开关(如:gcc增加-g选项)

使用GDB启动程序: gdb 程序名

如: gdb main


使用GDB调试已存在的进程: gdb -pid 进程号

如:gdb -pid 12345


运行:run


设置断点:break 行号

如: break 30


显示断点信息: info break


删除所有断点:delete break 

删除指定断点:delete break [断点号]


继续运行: continue


显示代码: list


显示堆栈:bt


显示当前地点:where


显示线程信息:info thread


切换线程:thread ID 


在所有线程中相应的行上设置断点:break thread_test.c:123 thread all 

在指定线程中相应的行上设置断点:break thread_test.c:123 thread 线程号


 让一个或者多个线程执行GDB命令command: thread apply ID1 ID2 command 


让所有被调试线程执行GDB命令command: thread apply all command


set scheduler-locking off|on|step 实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行


在linux平台下,设置core dump文件生成的方法:
1) 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。
2) 使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 1024
3) 默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid
4) 通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

5)调试core文件,gdb 程序名 core文件名

0 0