如何在Windows上调试C程序?

时间:2013-10-04 08:36:46

标签: c windows debugging gdb mingw

我从未使用过调试器,现在是时候尝试一下了。 MinGW似乎带有我一直在尝试使用的GDB。从命令行开始运行gdb并输入run myprog.exe启动调试器,但是当我这样做时,我得到了

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

如何进行或更简单的方式?

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

嗯,实际上,最简单的方法是使用IDE。您可能想尝试code::blocks - 非常容易使用,在安装时为您配置一切(只需确保选择一个编译器 - 不要担心,它会提示您)在那里,你是一切准备就绪。由于它是多平台的,它也不会真正锁定你的窗口,并为你提供非常强大的(并且我认为更重要的是,方便的)图形调试的可能性。

答案 2 :(得分: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 

答案 3 :(得分:0)

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

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

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