【发布时间】:2015-02-01 17:42:22
【问题描述】:
我有一个无法设置退出代码的 C++ Windows 程序。该程序非常复杂,我目前无法使用简单的测试用例来重现它。我知道程序调用exit(1),因为我在那行有一个断点。在我跳过它之后,调试器 (VS2010) 立即打印 The program program.exe has exited with code 0 (0x0). 当我从 shell 运行它时,%ERRORLEVEL% 也设置为 0。
我使用 subsystem:console 和普通的旧 main(没有 WinMain)。
这只发生在 Windows Server 2008 R2 上,不会发生在我的 Windows 8.1 笔记本电脑上。我在两者上运行相同的可执行文件。
我尝试使用exit、_exit、ExitProcess 和return(有问题的电话在main),但这些似乎都没有任何效果。我也试过返回其他代码,也没有结果。
有一个similar question,但我无法重现其中描述的结果。我的程序确实使用线程。
我该如何调试这个问题?我很困惑。
【问题讨论】:
-
UB 某处?堆栈被覆盖?没有其他看起来奇怪或不合适的地方吗?
-
@JoachimPileborg 很难说。某处可能有UB,但我怎么能找到它?堆栈似乎还可以。我知道 UB 就是 UB,但在这种情况下,我们甚至不必受 C++ 规则的约束。 WINAPI 函数如
ExitProcess无论如何都应该工作(我们可以从汇编语言程序中调用它们)。我绝对确定1被传递给exit,因为我可以介入并在调试器中查看标准库代码,并使用调试器实际观察ExitProcess(1)是如何被调用的。即使在机器指令级别。我无法进一步调试ExitProcess。
标签: c++ windows windows-server-2008 exit-code