要使用 gdb 调试,必须在gcc / g++ 生成执行文件时,加上 -g 选项,那么在生成的时候,就会在该执行文件中加入一些debug信息。

gcc -g -o test test.c

目录

1、常用调试命令

(1) 进入 / 退出调试模式

(2) 开始调试

2、多进程调试命令

1、跟踪父进程或子进程调试

2、进程间切换


1、常用调试命令

(1) 进入 / 退出调试模式

进入调试模式: gdb  执行文件名。如 gdb test

退出调试模式:ctrl + d 或者 quit 命令

(2) 开始调试

实际开始调试时,涉及到的命令可以参考如下表格:

调试命令

含义

list / l   行号

从某一行开始往下显示,一次显示10行。l 2:表示从第二行开始显示10行的内容。

list / l   函数名

显示某个函数的源码。l  main:显示main函数的全部内容

run / r

运行程序,遇到断点会停下来

next / n

单行执行

step / s

进入函数调用

breaktrace / bt

查看各级函数的调用及参数(相当于VS中的调用堆栈)

display  变量名

跟踪查看一个变量,每次停下来都显示它的值

break / b  行号

在某一行设置断点

info break

查看断点信息

delete breakpoints n

删除序号为 n 的断点,注意是序号,不是行号(使用info break查看断点序号)

delete breakpoints

删除所有断点

finish

执行完当前函数停下来

continue

直接到达下一个断点

until  行号  

直接跳转到指定行。until 5:跳转到第5行

2、多进程调试命令

1、跟踪父进程或子进程调试

默认情况下,gdb跟踪的是父进程,如果要查看gdb的跟踪状态,可以输入

show follow-fork-mode      # 查看当前 gdb 的跟踪状态

如果要跟踪子进程,可以输入

set follow-fork-mode child      # 跟踪子进程

如果要重新跟踪父进程,可以输入 

set follow-fork-mode parent     # 跟踪父进程

2、进程间切换

gdb 默认只跟踪一个进程,要实现进程间切换,需要让两个进程都在gdb的控制下。输入下面的指令后,一个进程会处于调试状态(follow-fork-mode决定),另一个会暂停

set show detach-on-fork off     # 让父子进程都在gdb的控制下

查看当前进程的信息

info inferiors        # info 查看当前进程信息

java 有gdb调试 gdb调试进程_父进程

切换到指定进程

inferiors  进程序号    # 上一步可以查到进程序号