GDB的常用命令

GDB是一个调试程序,可以用来调试C/C++程序。这个C/C++要产生符号表才能使用GDB调用。例如C++:

g++ -g source.cpp

GDB常用命令

首先要生成一个有调试符号的ELF文件(exe curable and linkable format),简单点说就是一个带调试符号可执行文件。加-g参数进行编译。

hello.cpp:
请添加图片描述

──(kali㉿kali)-[~/dev/Bear]
└─$ g++ -o world -g hello.cpp
──(kali㉿kali)-[~/dev/Bear]
└─$ ls
world hello.cpp

启动gdb调试程序

──(kali㉿kali)-[~/dev/Bear]
└─$ gdb

为了方便我们调试,在开始调前运行layout next

这个命令将显示程序中当前位置周围的源代码。这个视图对那些刚接触gdb的人很有帮助,特别是在处理您不熟悉的源代码时。
在启动GDB后,第一次输入

(gdb) layout next

请添加图片描述
请添加图片描述
再重复执行 layout next,将显示汇编语言的程序。
请添加图片描述
layout prev这个命令就是回到上一个模式。

使用world文件作为调试,使用file文件来读入调试用的文件world的符号

使用file将用作调试的文件的符号载入

(gdb) file world
Reading symbols from world...

设置断点

断点在特定的行数:

(gdb) break 2
(gdb) break 7

也可以断点在函数上:

(gdb) break main

请添加图片描述

运行world程序

(gdb) run world

或传些一参数给world程序:

(gdb) run world "ling ling"

请添加图片描述

使用next命令运行到下一行

(gdb) next

如果遇到一个函数调用,想进去看看,就可以用step

(gdb) step

请添加图片描述

如果已进入函数,然后不想继续看了,想回到它被调用的地方,就可以用finish

(gdb) finish

如果要回到调用点,可以使用return命令:

请添加图片描述

使用print检查一些变量的值

请添加图片描述

除了使用print检查一些变量的值,还可以使用display,与print的不同的是它会在每条指令之后重新打印信息。

在这里插入图片描述

使用clear清掉断点

如清掉第7行的断点

(gdb) clear 7

请添加图片描述
或者清点某个方法名上的断点:

(gdb) clear main

请添加图片描述

bt显示函数调用堆栈,即自到达这一行以来运行过的每个函数,即显示函数调用栈。

(gdb) bt

请添加图片描述

continue命令用于从断点停止的地方继续继续,直到下一个断点。

(gdb) continue

frame [number] goes to the selected frame in the call stack.

使用list命令,打印当前源文件中当前行周围的区域。显示当前行和调用的函数堆栈请添加图片描述

quit或者exit都是gdb调试程序。

上面这些命令是用得比较普遍的。更高级的使用可以通过help命令来找到更多有用的信息

(gdb) help

请添加图片描述
通过help命令就可以了解更多高级应用。在此就不再展开了。gdb学习起来还是很容易的。

猜你喜欢

转载自blog.csdn.net/weixin_40763897/article/details/128749102
今日推荐