一、C++调试准备工作
调试代码:
#include <iostream> int main(int argc, char** argv) { int iTest = 100; const char* str = "this is a test"; std::cout << "iTest is " << iTest << ",str is" << str << std::endl; std::cout << "参数为:" << std::endl; for (int i = 0; i < argc; ++i) { std::cout << argv[i] << std::endl; } std::cout << "hello world" << std::endl; return 0; }
执行编译命令:gcc hello_world.cpp -o hello_world -lstdc++,然后使用GDB进入调试模式:gdb hello_world
"No debugging symbols found in hello_world"表示可执行程序没有调试信息。需要在编译的时候加入 "-g"参数,即gcc hello_world.cpp -o hello_world -lstdc++。执行结束后再次通过GDB进入调试模式:
"Reading symbols from hello_world..."表明可执行程序中已经存在调试信息。
二、GDB调试中常用的命令
1.list命令
显示源代码,默认显示10行,再次输入l后,会继续向下显示源代码
2.break命令
break命令简称b,为程序设置断点。比如说在上述代码的main函数中设置断点,输入命令"b main",结果如下所示,表示在main函数的第四行设置断点。
设置断点的方法有很多种,比如说"b + 文件名:行数",即可在指定文件的所在行中设置断点,如下所示:
输入"i b"命令可以查看设置的断点:
3.run命令
run简称r,输入r之后就开始执行我们的程序。以为上述代码我们设置了两个断点,所以它启动后,遇到这个断点就会中断下来。
因为我们在代码的第四行设置了一个断点,所以程序在第四行的时候停止了下来。
这个时候可以继续往下执行,输入n或者next这个命令它就会往下执行。n代表往下执行一步,此时会走到代码的第五行,iTest也被赋值为100,我们可以通过查看命令p,也就是print的意思,来查看iTest的值。
此时第五行代码还未执行,如果此时查看str变量的值,会发现,它的值是乱码的。需要往下继续执行,然后再查看str的值。
4. 显示全部的局部变量
输入"i locals"命令可以显示文件中的局部变量
标签:命令,GDB,设置,Linux,world,断点,hello,调试 From: https://www.cnblogs.com/TechNomad/p/17956456