GDB 笔记

一. 加入调试信息

   gcc -g *.c


二. 启动 gdb

1. 启动新进程

   gdb a.out

   run 参数1 参数2

2. 调试已有进程

   gdb -p 进程号


三. 断点

   b 行号/函数名/文件名:行号

   info b                 查看已经设置的断点

   continue            运行到下一个断点

   delete/clear       删除断点


四. 断点保存

   编辑文件例如 break 并输入中断点:

   br   main
   保存后, gdb 可执行文件 -x break 即可自动设置断点


五. 条件断点

   b 行号/文件名:行号 if 表达式        if 后无需括号

   condition 断点号 expression         修改表达式

   condition 断点号                           删除表达式


六. 跟踪

   la(layout)    显示源码

   print 变量

   p\x 变量    以十六进制查看

   next    执行下一行语句,如果是函数,不进入

   step    执行下一行语句,如果是函数,进入


七. 调试线程

   info threads    显示当前可调试的所有线程

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

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

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

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


   non-stop mode:For some multi-threaded targets, gdb supports an optional mode of operation in which you can examine stopped program threads in the debugger while other threads continue to execute freely. This minimizes intrusion when debugging live systems, such as programs where some threads have real-time constraints or must continue to respond to external events. This is referred to as non-stop mode.

启动命令参考:gdb -iex "set target-async on" -iex "set pagination off" -iex "set non-stop on" ...

参考:http://sourceware.org/gdb/download/onlinedocs/gdb/Non_002dStop-Mode.html#Non_002dStop-Mode


GDB 笔记,布布扣,bubuko.com

GDB 笔记

上一篇:SQL2005学习(十九),字符数据类型


下一篇:Python WEB开发环境搭建及配置三之Mysql