`

Linux系统GDB调试

 
阅读更多

1、GDB调试基本命令
(1)开启调试:gdb filename(启动一个程序来调试)或者attach pid(调试正在运行程序)或者file filename(开启gdb后,然后启动一个程序开始执行)
(2)l(list):查看文件
(3)b 6 | b sum | b 8 if i == 10:设置文件行断点;设置函数断点;设置条件断点
(4)info b:查看断点信息
(5)r(run):运行代码
(6)c(continue):继续运行指导遇到断点或退出程序
(7)n(next):下一步,遇到函数,则跳过函数
(8)s(step):下一步,遇到函数,则进入该函数
(9)delete 断点号:删除指定断点
(10)disable 断点号:停止指定断点
(11)p(print) 变量 | 表达式:查看程序运行时对应表达式和变量的值
(12)display 表达式 | info display | undisplay num:自动显示
(13)x显示内存
(14)bt:显示调用栈
(15)set:设置运行中程序变量的值

2、多线程程序调试
(1)info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。
(2)thread ID 切换当前调试的线程为指定ID的线程。
(3)break thread_test.c:123 thread all 在所有线程中相应的行上设置断点
(4)thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。
(5)thread apply all command 让所有被调试线程执行GDB命令command。
(6)set scheduler-locking off|on|step 估计是实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。
注意在set scheduler-locking on,设置只运行当前线程后,需要c一下,代码才会继续往下执行

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics