Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用MinGW-gdb调试器调试C++;Windows中的程序?_C++_Windows_Debugging_Gdb_Mingw - Fatal编程技术网

C++ 如何使用MinGW-gdb调试器调试C++;Windows中的程序?

C++ 如何使用MinGW-gdb调试器调试C++;Windows中的程序?,c++,windows,debugging,gdb,mingw,C++,Windows,Debugging,Gdb,Mingw,我已经查找了这方面的文档,但什么也没找到。我已经安装了MinGW,它工作得很好。我只是不知道如何使用调试器 给出一些简单的代码,比如在一个名为“mycode.cpp”的文件中: intmain() { 内部温度=0; 对于(int i=0;i

我已经查找了这方面的文档,但什么也没找到。我已经安装了MinGW,它工作得很好。我只是不知道如何使用调试器

给出一些简单的代码,比如在一个名为“mycode.cpp”的文件中:

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
    在程序到达
    mycode.cpp
    的第4行时中断执行
  • 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