gdb调试

本文详细介绍了GDB调试器中的常用命令,包括运行、断点设置、执行控制、变量查看、堆栈追踪、源代码操作、多线程调试以及高级技巧如gtest应用、layout模式、watchpoints和单步跟踪机器指令。
摘要由CSDN通过智能技术生成

1.常用gdb调试命令:

1. 运行程序:
   - run (r):从头开始执行程序。
   - run args (r args):使用命令行参数运行程序。

2. 断点操作:
   - break (b):在特定行或函数设置断点。
   - info breakpoints (i b):列出当前设置的所有断点。

   - delete (d):删除所有断点。

   - delete 2:删除特定序号的断点(本句删除断点2)。

   - clear (cl):删除当前行断点。

   - clear 2:删除特定行的断点(本句删除第二行断点)

3. 执行控制:
   - continue (c):继续程序执行,直到下一个断点或程序结束。
   - next (n):执行下一行代码,跳过函数调用。
   - step (s):执行下一行代码,进入函数调用。
   - finish (fin):执行直到当前函数结束。

   - jump (j):跳转到有断点的指定行。

4. 变量操作:
   - print (p):打印变量的值。
   - set (set):修改变量的值。
   - display (disp):在每一步之后显示变量的值。
   - watch (w):设置变量的监视点,在其值发生变化时触发。
   - whatis (whatis):显示变量的类型。
   - info locals (i locals):列出当前帧中的所有局部变量。

5. 调用堆栈:
   - backtrace (bt):打印函数调用堆栈。
   - frame (f):选择特定的堆栈帧进行检查。

6. 源代码操作:
   - list (l):显示当前行附近的源代码。

7. 多线程调试:
   - info threads (i threads):列出程序中的所有线程。
   - thread (th):选择特定的线程进行检查。

8. 其他命令:
   - detach (detach):从正在运行的程序中分离GDB。
   - quit (q):退出GDB。

还有许多其他命令可用,在GDB文档中可找到更详细的信息,或者使用GDB中的"help"命令获取帮助。

GDB的常用命令 (pczh.cn)

GDB的5个高级调试技巧,只会打断点看变量的你必须收藏 ​​​​​​

2.其他GDB调试命令:

1.gtest中调试指定文件

        gdb --args ./gtest --gtest_filter=GCIConnectionPoolCreate_test.*

        b GCIConnectionPoolCreate_test.cpp:50

2.layout使用

        layout next:显示汇编语言

        layout prev:回到上一模式

3.bt

        当程序突然崩溃的时候,可以使用gdb附着到程序中,然后执行bt命令来查看最新的堆栈信息,这往往能够很快定位到问题的原因

4.thread apply all bt

        查看当前进程的所有线程的堆栈信息

5.watch技巧:写时watch和读时watch

watch一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果变化则停住程序。

watch <expr>:为表达式expr设置一个观察点。一旦表达式值有变化时,马上停住程序。

rwatch <expr>:当表达式expr被读时,停住程序。

awatch <expr>:当表达式的值被读或被写时,停住程序。

info watchpoints:列出当前所设置了的所有观察点。

6.单步跟踪机器指令

stepi(缩写si)和nexti(缩写ni)

stepi和nexti用于单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令,这个在调用一些算法或O2优化问题时特别有用。

7.call

在GDB(GNU调试器)中,call是一个用于调用函数的命令。它允许您在调试过程中直接调用程序中定义的函数,并在调试会话中查看函数的结果。

 (gdb) call printf("asdasdasda\n")

  $1 = 10

GDB会将返回值存储在$1变量中,可以使用p $1命令来查看它的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值