繁体   English   中英

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

[英]"step" not ending program at the end of program, but it ending it after 5 more "step"

我使用的是 Windows 10。我用 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]

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

在程序结束时“step”不结束程序

问题是您对程序开始和结束位置的看法是完全错误的:您的程序在到达main之前执行了 100 或 1000 条指令,而在main返回后又执行了 100 或 1000 条指令。

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

你能告诉我如何告诉 gdb 只调试我的代码。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM