c - crtexe.c - 关于在 VSCode 中调试 C/C++ 文件的问题
问题描述
在使用 Visual Studio Code 调试 C/C++ 文件时,当从主函数的 '}' 行中按 'step over' 或 'step into' 键时,程序流程进入 crtexe.c。
但是,当在 crtexe.c 中继续调试时,流程只是停在if (!managedapp)
line 上并且不会返回到 main() 函数。
如果我在 main() 的 '}' 行中按 'step out' 键,则会出现错误消息“无法退出。操作失败,错误代码 0x80004004”。
我在另一个 IDE(如 CLion 或 NetBeans)中测试了相同的代码,但没有出现这些问题。
我正在使用 MinGW-w64 GCC 和 GDB。我该如何解决这个问题?
示例代码(main.c):
#include <stdio.h>
int main()
{
printf("Call main()\n");
int num1 = 1;
int num2 = 20;
int num3 = num1 + num2;
printf("%d\n", num3);
return 0;
}
启动.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "GDB Launch",
"type": "cppdbg",
"request": "launch",
"program": "C:/Users/.../main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:/Users/...",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:/msys2/mingw64/bin/gdb.exe",
"sourceFileMap": {
"/c/": "C:/"
}
}
]
}
解决方案
从图像中我看到条件之前的调用:
mainret = main(argc, argv);
您声明了主要功能:
int main();
由于程序已成功链接,因此程序是 C 语言的。main
因此堆栈帧在退出后被破坏。在 Windows 上,默认调用约定是被调用函数负责从堆栈中清除函数参数,并且调用者在main
. 您应该正确声明 main 函数:
int main(int argc, char** argv);
推荐阅读
- c++ - 自定义 QSystemTrayIcon
- td-engine - 无法查询 tdengine restful api 中的所有行
- html - CSS在按钮上方对齐绝对div
- delphi - 如何将参数传递给现有的应用程序实例
- tensorflow - 导入tensoflow_hub时如何克服“没有名为'keras'的模块”
- numpy - 请解决正文中提到的numpy问题
- java - 了解 Android Studio 中的 FileProvider
- pine-script - Pine 脚本冷却一定数量的酒吧
- r - DESeqDataSetFromHTSeqCount 无法识别我的目录
- python - TD游戏和敌人瞄准