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

时间:2018-09-27 15:58:02

标签: c++ visual-studio visual-c++

我在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这样的消息可以捕获?

1 个答案:

答案 0 :(得分:1)

当您按Shift + F5键(假设您从Visual Studio开始)时,调试器将直接并立即终止子进程。不会有任何消息或通知发送到该程序。

如果您先按Ctrl + F5组合键,然后手动附加,则Shift + F5组合键将断开,程序将继续运行。然后您可以轮询IsDebuggerPresent(),因为您不会关闭。尽管目前尚不清楚为什么要这么做。

您可以检查调试器和被调试者可以用来通信的list of all functions,但是基本上所有的事情都由被调试者向调试器发送额外的调试信息。被调试者可以知道调试器是否已附加,但是在将要分离(或杀死它)时不会收到通知。