GDB 调试 C++ 程序¶
当使用GNU Debugger(GDB)调试C代码时,你会发现它是UNIX系统上最受欢迎的调试器,用于调试C和C++程序。下面是一个简明易懂的使用GDB调试C代码的解释:
首先,在命令行中切换到包含代码的当前文件夹,并运行以下命令:
gcc -g -Wall code.c -o output
其中,-g选项对于使用GDB工具是必要的。-Wall选项用于显示警告信息。这将创建一个名为"output"的可执行文件。
然后,运行以下命令打开GDB对话框并从output文件中获取符号信息(或简单地说,设置整个环境以调试code.c):
gdb output
使用以下命令可以帮助你进行调试:
list:列出源代码。b x:在x处设置断点。x可以是模块的名称或行号。例如,x可以是main等函数名称。r:执行程序(直到断点),并提供结果。即,在断点处运行代码并生成结果。[如果有参数,则为r 参数1 参数2 参数3 ...]info breakpoints x:给出断点x的详细信息。info breakpoints:给出所有断点的详细信息。delete x:删除断点x。disable x和enable x:禁用和启用断点x。print p:打印变量p的值。display p:在每次运行后显示变量p的值(自动化整个过程)。c:继续执行程序(跳过for循环等迭代)。使用c-iter1跳过第一次迭代,再次输入c跳过第二次迭代,依此类推。- 你还可以使用额外的条件,例如
b x if (y > m),意思是如果y的值大于m,则在第x行处设置断点。 - GDB还可以在多个文件中设置断点。例如,如果program.c中调用了function.c中的一个函数,你可以使用
b function.c:x在function.c的第x行设置断点。 bt:用于回溯代码执行的路径。bt会给出一个索引列表,显示代码经过的进程。例如:#0 进程0的描述,#1 进程1的描述,依此类推。其中,0是最近的进程。- 输入
f x将跳转到进程x(f 0将跳转到进程0),并给出对应函数执行时的变量值。 s:用于进入函数并获取更多详细信息。next:用于逐行执行代码。