“ step”不是在程序结束时结束程序,而是在另外5个“ step”之后结束

时间:2019-01-02 14:22:46

标签: c gdb

我正在使用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]

我想知道,我做错了什么导致了问题。

1 个答案:

答案 0 :(得分:2)

  

“步骤”未在程序结尾处结束程序

问题在于,您对程序的开始和结束位置的概念非常错误:您的程序在到达main之前执行100或1000指令,而在main返回之后又执行100或1000指令。

这些说明是C运行时启动和关闭的一部分。通常,您对在那里的调试不感兴趣,但是C运行时的开发人员确实需要对其进行调试,并且调试器不知道您是否愿意。

  

您能告诉我如何告诉gdb仅调试我的代码吗?

GDB 不知道哪些代码是您自己的,哪些不是(并且我不相信有办法告诉您)。

如果您不想调试main的末尾,那么就不要要求GDB这样做:一旦到达“您的代码”的末尾,请使用continue而不是step