在过程出口中打破视觉工作室
Break in Visual Studio on process exit
我在确定导致进程退出的原因时遇到了一些困难。我正在调试一些关机代码中的断点,但是,在断点并踏上一次调试器后,整个过程立即退出。每个线程在输出窗口中报告一个-1的退出代码。当时的过程中有很多线程,并且代码库很大,因此很难搜索罪魁祸首。
我已经尝试安装std::atexit
功能,但这不会受到打击。我还尝试过覆盖SetUnhandledExceptionFilter
,以防它是由崩溃引起的,并且也不会受到打击。该项目已禁用例外(#define _HAS_EXCEPTIONS=0
),因此我无法调用std::set_terminate
或std::set_unexpected
。
是否还有其他方法可以确定什么导致该过程退出?当过程即将终止时,有些选项可以打破调试器?
使用调试器运行应用程序并读取调试输出。如果应用程序终止是因为C 异常或SEH,则将在输出窗口中阅读。
如果您在那里看不到任何有趣的东西,则表示您的应用程序称为exitProcess/exitthread/exit,或更糟糕的是,terminateProcess/terminateThread/_exit。
您可以在这些上放置断点。在启动时设置一个断点,启动调试器。确保您有针对相关DLL的调试符号,kernel32.dll for exitprocess and Friends,还有其他一些DLL,例如出口,例如ucrtbase.dll。在"断点"窗口中按"新/功能断点",例如" ExitProcess",按OK。
您也可以尝试使用Windows SDK的GFLAGS工具。
如果您可以找到(通过读取Windows logs>应用程序)原因是自我退出,则可以在GFLAGS中检查"启用转储集合",然后您可以将转储加载到Windbg中并获得完整的呼叫堆栈告诉您谁打电话给谁。
不幸的是,该工具的最新版本被破坏了。
但是您可以安装旧的Windows SDK。您只需要从那里开始的" Windows调试工具",无需安装完整的SDK。
- 视觉工作室项目.提取源文件夹名称
- 为什么我在尝试模板时遇到视觉工作室C++错误
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 背包问题,视觉工作室问题
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 在turbo c++中编译.不在视觉工作室
- 将库文件夹添加到视觉工作室
- 在视觉工作室中以十六进制进行位移位并通过 cout 输出
- 我正在尝试在视觉工作室上创建自己的库/源函数
- 我在视觉工作室中制作了一个类似胭脂的游戏,我想显示玩家的生命值
- 在 UWP 视觉工作室项目中包括外部文件夹
- 视觉工作室未显示符号表?
- 如何在视觉工作室社区中设置竞争性编程站点等环境?
- 无法在视觉工作室社区 2015 中加载项目
- 合成错误不知道为什么会发生这种情况,请检查一下并告诉我这是我的编码还是视觉工作室
- 使用QT Connect时,视觉工作室警告
- 执行视觉工作室异常处理模式
- 在不同的计算机上运行.exe文件.(视觉工作室)