我正在使用Windows10。我用C语言编写了一个HelloWorld程序。
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
我使用以下命令使用cmd对此进行了编译
gcc -g -o HelloWorld HelloWorld.c
在gdb中,我写了start
。而且我多次输入step
。有时会打印出
(gdb) step
7 }
然后我再次输入step
。它打印
(gdb) step
__tmainCRTStartup () at C:/crossdev/src/mingw-w64-v4-git/mingw-w64-crt/crt/crtexe.c:334
334 C:/crossdev/src/mingw-w64-v4-git/mingw-w64-crt/crt/crtexe.c: No such file or directory.
下一步,它会打印
332 in C:/crossdev/src/mingw-w64-v4-git/mingw-w64-crt/crt/crtexe.c
此后,每次我写step
时它都会打印在行上方。最终在某个时候打印出来
[Thread 1952.0x1628 exited with code 0]
[Inferior 1 (process 1952) exited normally]
我想知道,我做错了什么导致了问题。
答案 0 :(得分:2)
“步骤”未在程序结尾处结束程序
问题在于,您对程序的开始和结束位置的概念非常错误:您的程序在到达main
之前执行100或1000指令,而在main
返回之后又执行100或1000指令。
这些说明是C运行时启动和关闭的一部分。通常,您对在那里的调试不感兴趣,但是C运行时的开发人员确实需要对其进行调试,并且调试器不知道您是否愿意。
您能告诉我如何告诉gdb仅调试我的代码吗?
GDB 不知道哪些代码是您自己的,哪些不是(并且我不相信有办法告诉您)。
如果您不想调试main
的末尾,那么就不要要求GDB这样做:一旦到达“您的代码”的末尾,请使用continue
而不是step
。