程序在 Visual Studio 中停止运行时终止

program termination when you stop running it in Visual Studio

本文关键字:运行时 终止 Visual Studio 程序      更新时间:2023-10-16

我在Visual C++中有应用程序,当程序终止时,例如通过按右上角的"X"关闭窗口来捕获窗口消息。在这里,它遵循常规过程:WM_CLOSE->WM_DESTROY->WM_QUIT

long FAR PASCAL MAIN_WindowProc( HWND     hWnd, 
UINT     message, 
WPARAM   wParam, 
LPARAM   lParam ) 
{
...
case WM_CLOSE:
{
if ( Game() && pcgaming()->active ) 
{
if ( Game()->MainStatus != MAINSTATUS_SHUTTINGDOWN ) 
{
Game()->Exit_To_Windows = true;
Game()->ExitNow( EXIT_ESCAPE );
}
}
return (long) 0;
}break;
...

当您通过按下按钮或选择 Shift + F5 停止在 Visual Studio 中运行应用程序时,程序实际上是如何终止的? 有没有像WM_XXX一样要捕获的消息?

当您按 Shift+F5 时(假设您从 Visual Studio 启动(,调试器会直接立即终止子进程。不会向程序发送任何消息或通知。

如果您从 Ctrl+F5 开始,后来手动附加,则 Shift+F5 将分离,程序将继续运行。然后,您可以轮询IsDebuggerPresent((,因为您不会关闭。虽然不清楚你为什么要这样做。

可以检查调试器和被调试者可用于通信的所有函数的列表,但基本上都是由被调试者向调试器发送额外的调试信息。调试对象可以知道调试器是否已附加,但在即将分离(或终止(时不会收到通知。