(VS2010)MFC程序中F5后有些断点无效

来源:互联网 发布:金山在线数据恢复收费 编辑:程序博客网 时间:2024/06/06 14:22

在学习MFC的过程中,将断点设置在主类的构造函数上时,F5后此处一直无法停下来(透明圆圈加感叹号),然而在里面加了死循环后,确实有效,说明构造函数是执行了的。


CClientApp::CClientApp(){    // 支持重新启动管理器    m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;    //while(1);    // TODO: 在此处添加构造代码,    // 将所有重要的初始化放置在 InitInstance 中}// 唯一的一个 CClientApp 对象CSOCK theSock;CClientApp theApp;

与此同时,类的其他成员函数却能正常断点:


// CClientApp 初始化BOOL CClientApp::InitInstance(){    // 如果一个运行在 Windows XP 上的应用程序清单指定要    // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,    //则需要 InitCommonControlsEx()。否则,将无法创建窗口。    INITCOMMONCONTROLSEX InitCtrls;    InitCtrls.dwSize = sizeof(InitCtrls);    // 将它设置为包括所有要在应用程序中使用的    // 公共控件类。    InitCtrls.dwICC = ICC_WIN95_CLASSES;    InitCommonControlsEx(&InitCtrls);    CWinApp::InitInstance();    AfxEnableControlContainer();    // 创建 shell 管理器,以防对话框包含    // 任何 shell 树视图控件或 shell 列表视图控件。    CShellManager *pShellManager = new CShellManager;    // 标准初始化    // 如果未使用这些功能并希望减小    // 最终可执行文件的大小,则应移除下列    // 不需要的特定初始化例程    // 更改用于存储设置的注册表项    // TODO: 应适当修改该字符串,    // 例如修改为公司或组织名    SetRegistryKey(_T("应用程序向导生成的本地应用程序"));    CClientDlg dlg;    m_pMainWnd = &dlg;    INT_PTR nResponse = dlg.DoModal();    if (nResponse == IDOK)    {        // TODO: 在此放置处理何时用        //  “确定”来关闭对话框的代码    }    else if (nResponse == IDCANCEL)    {        // TODO: 在此放置处理何时用        //  “取消”来关闭对话框的代码    }    // 删除上面创建的 shell 管理器。    if (pShellManager != NULL)    {        delete pShellManager;    }    // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,    //  而不是启动应用程序的消息泵。    return FALSE;}

为什么会出现这种情况呢?
有许多人给出了解决方案:


VS2010 调试中断点突然失效的解决办法

VS2010 旗舰版 MFC开发 调试断点无效的解决办法


然而我试过后(将CPP记事本打开改变存储方式没试过),发现没用。这时我感觉可能我的问题和他们的问题不太一样,于是再自己琢磨了下,想到当时为了把这个程序拿出来测试,改成的Release的解决方案配置,这是唯一一个与以往设置不同的地方。


这里写图片描述



于是,将Release改为Debug,断点正常。不求甚解。


原创粉丝点击