6

我从来没有使用过调试器,现在是时候试一试了。MinGW 似乎附带了我一直在尝试使用的 GDB。假设从命令行运行 gdb 并键入run myprog.exe会启动调试器,但是当我这样做时,我得到了

启动程序:C:\MinGW\bin\myprog.exe MyProg.exe [New Thread 1828.0xd8c] 打开文件时出错。[Inferior 1(进程 1828)以代码 02 退出]

如何进行或有什么更简单的方法?

特别是我试图清除未定义的行为。

4

5 回答 5

2

由于您的程序终止,您需要设置一个断点来查看任何内容。break main在运行线之前尝试。然后您可以执行命令行next(下一行),step(步入/退出函数调用),print expression(其中表达式可以是变量名或函数调用或计算),display expression(与打印相同,但在每个提示之前打印) . 在任何给定点,您都可以键入backtrace以获取调用堆栈。您甚至可以键入up并向down上移动调用堆栈,以便打印更高的局部变量。

于 2013-10-04T08:48:03.187 回答
1

使用 gdb 传递二进制文件

gdb <binary>

然后将断点设置为 main

gdb) break main

然后在 gdb 中运行你的程序

gdb) run

然后断点命中使用 'n' 或 'next' 步进到不同的行

gdb) n

使用 's' 进入函数并使用 'p' 打印 var 值

例子 :

gdb) s <fun_name> 
gdb) p x 
于 2013-10-04T09:08:47.410 回答
1

好吧,实际上,最简单的方法是使用 IDE。您可能想尝试一下code::blocks - 非常易于使用,在安装时为您配置所有内容(只需确保选择一个编译器 - 不用担心,它会提示您)然后就可以了设置并准备出发。由于它是多平台的,它也不会真正将您锁定在 Windows 中,并为您提供非常强大(而且,我猜更重要的是,方便)图形调试的可能性。

于 2013-10-04T08:39:58.563 回答
0

我建议,作为初学者从 Visual Studio 开始。它有一个非常好的和易于使用的调试器。只需在要开始调试的行中创建一个断点(单击该行旁边的左侧栏或右键单击并创建一个断点)。设置断点后,您只需在调试模式下运行程序,程序的执行将在创建断点的位置停止。

此时,您应该能够查看有关程序执行的所有有价值的信息。您可以使用 F10 继续执行步骤或使用 F11 进入执行树。

调试器与许多其他高级功能一样,如条件中断、命中计数等,但您可以从它的基本功能开始。

于 2013-10-04T10:33:24.213 回答
0

如果我编译这样的程序:

gcc -o my-prog -g myprog.c

然后我可以像这样调试my-prog它的可执行文件:

gdb my-prog

-g选项告诉gcc生成完整的调试信息。其他编译器将有他们自己版本的这个选项(例如 MSVCcl命令有这个/Zi选项)。

由于您在gdb程序上运行时遇到问题,因此可能值得检查它是否首先使用调试信息进行编译。调试信息通常在与您编译程序的位置相同的位置生成。

于 2021-09-29T15:38:59.430 回答