
GDB用法
记录常用的debug手段
持续学习,不断沉淀
C++开发工程师
展开
-
GDB thread命令
1、概念介绍:轻量级进程: (LWP, light weight process) 是一种由内核支持的用户线程,LWP相当于用户线程。2、命令介绍:命令用法info threads显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程thread IDID为1/2/3等,切换当前调试的线程为指定ID的线程set scheduler-locking off不锁定任何线程,也就是所有线程都执行,这原创 2022-02-12 10:45:00 · 2631 阅读 · 0 评论 -
GDB 查看栈信息
1、info args: 打印出当前函数的参数名及其值。2、info locals: 打印出当前函数中所有局部变量及其值3、info catch: 打印出当前的函数中的异常处理信息原创 2021-06-30 20:11:29 · 332 阅读 · 0 评论 -
GDB 信号处理 Signals Handle
1、信号 Signals:信号是一种软中断,应用程序一般都会处理信号,如程序异常退出等会发出信号。UNIX下的部分信号:SIGINT表示中断字符信号,也就是Ctrl+C的信号SIGBUS表示硬件故障的信号SIGCHLD表示子进程状态改变信号SIGKILL表示终止程序运行的信号2、GDB中处理信号:GDB调试器可以自动捕获C、C++程序中出现的信号,并根据事先约定好的方式处理它,默认收到任何信号都会停住正在运行的程序,以供你进行调试。2.1、控制GDB收到原创 2021-06-30 20:10:19 · 2105 阅读 · 0 评论 -
GDB用法:线程断点、条件断点
10、断点打在某一个线程上:b *0xb05b2f90 thread 27断点打在线程ID为27的线程上11、查看修改全局变量的值:i addr namespace1::g_bool_value查找全局变量的地址x /b 0xb05b2f90查看bool值set {unsigned int}0xb05b2f90 =2修改值12、条件断点:b *函数地址 if $r1==1在目标函数第一个参数为1时才断住break <lin原创 2021-06-30 20:04:08 · 2528 阅读 · 0 评论 -
GDB常用命令:查看进程、查看寄存器、断点相关
1、查看进程三种方式ps -A;ps -auxps -C processName2、处理进程相关./gdb attach processID不带参数gdb --args ./abd arg1 arg2带参数kill -9 processID关闭进程3、忽略一些信号量,让程序继续运行:handle SIG32 noprint nostop对应GDB中经常出现的信号量,可以相同处理4、查看函数地址i func classA::ab原创 2021-01-24 21:33:39 · 4056 阅读 · 0 评论 -
GDB Commands用法
1、命令介绍:GDB Commands:断点命令列表,让GDB在每次到达某一断点时自动执行一组命令。2、用法:2.1、整体用法: commands breakpoint-number // breakpoint-number为断点号,表示将以下命令添加到指定的断点上 。。。 commands // 任何有效的GDB命令,一行一个,以end结束 。。。 c end 2.2、命令详解:silent: 使GDB更安静地触发断点,用于在每次运行到断点时,不再显示详细的断点信息。原创 2021-05-23 20:28:40 · 3596 阅读 · 0 评论 -
GDB WatchPoint与CatchPoint
1、GDB WatchPoint用来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:1.1、watch <expr>当表达式(变量)expr值有变化时,停住程序。1.2、rwatch <expr>当表达式(变量)expr被读时,停住程序。1.3、awatch <expr>当表达式(变量)expr的值被读或被写时,停住程序。1.4、info watchpoints列出当前所设置了的所有观察原创 2021-06-30 19:54:26 · 1695 阅读 · 0 评论