C++ 如何使用MinGW-gdb调试器调试C++;Windows中的程序?
我已经查找了这方面的文档,但什么也没找到。我已经安装了MinGW,它工作得很好。我只是不知道如何使用调试器 给出一些简单的代码,比如在一个名为“mycode.cpp”的文件中:C++ 如何使用MinGW-gdb调试器调试C++;Windows中的程序?,c++,windows,debugging,gdb,mingw,C++,Windows,Debugging,Gdb,Mingw,我已经查找了这方面的文档,但什么也没找到。我已经安装了MinGW,它工作得很好。我只是不知道如何使用调试器 给出一些简单的代码,比如在一个名为“mycode.cpp”的文件中: intmain() { 内部温度=0; 对于(int i=0;i
intmain()
{
内部温度=0;
对于(int i=0;i<5;++i)
温度+=i;
返回0;
}
…我该如何调试这个。在windows中,我使用哪些命令调试MinGW和GDB代码?我可以像在VisualStudio中那样通过命令行逐步完成代码吗?如果是的话,我应该使用什么命令来实现这一点
有没有关于使用GDB的教程?我找不到,但如果有人能给我指路,那也太好了。我已经厌倦了编写大量的
std::cout
语句来调试复杂的代码。第一步是使用-g
编译程序,以便在可执行文件中包含调试信息:
g++ -g -o myprog.exe mycode.cpp
然后可以将程序加载到gdb
:
gdb myprog.exe
以下是一些让您开始学习的命令:
- 调用
时,main
将导致调试器中断。您还可以使用break main
在代码行上断开。例如,break FILENAME:LINENO
在程序到达break mycode.cpp:4
的第4行时中断执行mycode.cpp
启动程序。在您的情况下,您需要在启动程序之前设置断点,因为它很快退出start
。这就是打印变量值的方式,无论是局部变量、静态变量还是全局变量。例如,在打印VARNAME
循环中,您可以键入For
以打印出print temp
变量的值temp
这相当于“进入”步骤
或next
前进到下一行(如“跳过”)。您还可以使用,例如,adv+1
前进到特定文件的特定行adv mycode.cpp:8
打印回溯。本质上,这是一个堆栈跟踪bt
与可视化调试器的“continue”操作完全相同。它使程序继续执行,直到下一个断点或程序退出continue
最好的读物是。在这个问题中,有一些适用于windows的gdb GUI
虽然DDD尚未移植但您还应该熟悉一些命令:
运行
,继续
,下一步
,列表
和帮助
。当所有其他操作都失败时,请尝试使用help
。尝试g++-g helloworld.c
,它只生成一个.exe。它应该生成更多的文件来帮助调试gdb。运行gdb a.exe
会显示消息:不是可执行格式:无法识别文件格式
,并启动(gdb)
命令提示符。运行(gdb)break main
不会加载任何符号表。使用“文件”命令。。运行(gdb)start
会给出相同的,不会加载符号表。使用“文件”命令。
。我做错了什么?@Mahesha999没有生成其他文件;调试信息存储在可执行文件中。你能直接运行a.exe
吗?“非可执行格式:文件格式不可识别”表示a.exe
不是可执行文件。@Mahesha999启动GDB
时,“此GDB被配置为…”消息中列出了什么目标(如果没有看到这样的消息,显示配置
命令的输出是什么)?也许a.exe
是64位的,而gdb
是32位的,或者反之亦然?@Mahesha999谢谢您提供这些详细信息。我的猜测是,因为您的编译器是64位的,所以它正在生成64位二进制文件(除非您有一个交叉编译器)。您可以尝试使用-m32
GCC编译器选项编译程序。至于检查exe是32位还是64位,这里列出了很多方法:我个人在的32位和64位版本中打开二进制文件(讨论了这种技术)。
gdb myprog.exe