本文为该系列的第四篇文章,如果您尚未阅读前面的内容,可以通过以下链接进行查阅:
Linux中使用g++工具编译C++代码及其常用操作指令
Linux下C++命令行编译示例
Linux下的GDB调试器常用指令
准备代码
创建一个C++源代码文件 src/04_debug/sum.cpp,并添加以下代码:
#include using namespace std;int main(int argc, char const *argv[]) { int N = 100; int sum = 0; int i = 1; while (i <= N) { sum += i; i++; } cout << "Sum of numbers from 1 to " << N << " is " << sum << endl; return 0;}
进入调试模式
在进入调试模式之前,首先需要编译源代码,具体过程如下:
普通编译方式:
立即学习“C++免费学习笔记(深入)”;
g++ sum.cpp -o no_g.out
编译出用于调试的可执行文件:
g++ -g sum.cpp -o yes_g.out
使用gdb命令进行调试,如果我们尝试调试 no_g.out,将会看到以下错误提示:

这是因为no_g.out这个可执行文件不包含调试信息。输入quit并按回车即可退出。通过gdb yes_g.out指令执行包含调试信息的可执行文件,可以看到以下输出:

此时可以正常进入调试模式。
调试过程
直接执行程序:
run
或者使用简写r,运行结果如下图所示:

在第11行设置断点:
break 11
运行结果如下图所示:

也可以使用简写的方式,在第12行设置断点:
b 12
结果如下图所示:

使用info break指令或其简写i b查看当前设置的断点,结果如下图所示:

使用run指令或r指令执行程序,此时将命中第11行的断点,如下图内容所示:

此时可以查看变量的值,例如查看i的值,可以使用print i或p i指令,如下图所示:

使用p N查看N的值,如下图所示:

此时程序执行到第11行,如果需要继续执行,输入continue指令并按回车即可,程序将执行到代码的第12行,如下图所示:

由于我们处于while循环体内,i的值将不断变化,如果我们需要跟踪i值的变化,需要输入display i指令,再输入continue指令让程序单步执行,如下图所示:

可以观察到,通过循环,又回到了第一个断点,此时i的值已经变成了2。在gdb调试中,如果我们只按回车键,gdb将执行我们最后一次输入的指令,所以我们可以一直按回车键继续让程序单步执行。
当断点执行到某个位置时,如果我们想要查看断点附近的代码,可以执行list指令进行查看,如下图所示:

以上就是Linux下C++命令行调试实战的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/22333.html
微信扫一扫
支付宝扫一扫