各位大虾,你们好!我的程序(RELEASE版)运行一会儿,就出错,提示mfc42.dll出错,若在VC环境下运行DEBUG版很长时间都不会出错,请问这大概什么原因?

解决方案 »

  1.   

    怎样“调试” Release 版的程序    遇到 Debug 成功但 Release 失败,显然是一件很沮丧的事,而且往往无从下手。如果你看了以上的分析,结合错误的具体表现,很快找出了错误,固然很好。但如果一时找不出,以下给出了一些在这种情况下的策略。
        
        1. 前面已经提过,Debug 和 Release 只是一组编译选项的差别,实际上并没有什么定义能区分二者。我们可以修改 Release 版的编译选项来缩小错误范围。如上所述,可以把 Release 的选项逐个改为与之相对的 Debug 选项,如 /MD 改为 /MDd、/O1 改为 /Od,或运行时间优化改为程序大小优化。注意,一次只改一个选项,看改哪个选项时错误消失,再对应该选项相关的错误,针对性地查找。这些选项在 Project\Settings... 中都可以直接通过列表选取,通常不要手动修改。由于以上的分析已相当全面,这个方法是最有效的。    2. 在编程过程中就要时常注意测试 Release 版本,以免最后代码太多,时间又很紧。
        
        3. 在 Debug 版中使用 /W4 警告级别,这样可以从编译器获得最大限度的错误信息,比如 if( i =0 )就会引起 /W4 警告。不要忽略这些警告,通常这是你程序中的 Bug 引起的。但有时 /W4 会带来很多冗余信息,如 未使用的函数参数 警告,而很多消息处理函数都会忽略某些参数。我们可以用
          #progma warning(disable: 4702) //禁止
          //...
          #progma warning(default: 4702) //重新允许
    来暂时禁止某个警告,或使用
          #progma warning(push, 3) //设置警告级别为 /W3
          //...
          #progma warning(pop) //重设为 /W4
    来暂时改变警告级别,有时你可以只在认为可疑的那一部分代码使用 /W4。    4.你也可以像 Debug 一样调试你的 Release 版,只要加入调试符号。在 Project/Settings... 中,选中 Settings for "Win32 Release",选中 C/C++ 标签,Category 选 General,Debug Info 选 Program Database。再在 Link 标签 Project options  最后加上 "/OPT:REF" (引号不要输)。这样调试器就能使用 pdb 文件中的调试符号。但调试时你会发现断点很难设置,变量也很难找到——这些都被优化过了。不过令人庆幸的是,Call Stack 窗口仍然工作正常,即使帧指针被优化,栈信息(特别是返回地址)仍然能找到。这对定位错误很有帮助。
      

  2.   

    http://community.csdn.net/Expert/topic/3112/3112341.xml?temp=.1074182
      

  3.   

    我现在装了vc的sp6后,发现DEBUG版本错误,而RELEASE版本却没问题,郁闷提示为MFCO42D.dll出错,不知道怎么回事?
      

  4.   

    谢谢你们的帮助,请问
    主要针对这个MFC42.dll出错的原因吗?
    有时程序运行就好好,有时运行就不行
      

  5.   

    有时程序运行就好好,有时运行就不行
    不行时一般在“程序运行后,再点别的东西比如:我的电脑之类的”情况下,程序就出错,就NG了
    错误报告:
    <?xml version="1.0" encoding="UTF-16"?>
    <DATABASE>
    <EXE NAME="ais.exe" FILTER="GRABMI_FILTER_PRIVACY">
        <MATCHING_FILE NAME="串口调试助手V2.1.exe" SIZE="278528" CHECKSUM="0x37630856" BIN_FILE_VERSION="2.1.0.0" BIN_PRODUCT_VERSION="2.1.0.0" PRODUCT_VERSION="2, 1, 0, 0" FILE_DESCRIPTION="SComAssistant Microsoft 基础类应用程序" COMPANY_NAME="RoaringWindStudio 啸峰工作室" PRODUCT_NAME="SComAssistant应用程序" FILE_VERSION="2, 1, 0, 0" ORIGINAL_FILENAME="SComAssistant.EXE" INTERNAL_NAME="SComAssistant" LEGAL_COPYRIGHT="版权所有 (C) 2001" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="2.1.0.0" UPTO_BIN_PRODUCT_VERSION="2.1.0.0" LINK_DATE="06/25/2001 23:02:48" UPTO_LINK_DATE="06/25/2001 23:02:48" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="MSVCP60D.DLL" SIZE="516173" CHECKSUM="0xE85C6270" BIN_FILE_VERSION="6.0.8168.0" BIN_PRODUCT_VERSION="6.0.8168.0" PRODUCT_VERSION="6.00.8168.0" FILE_DESCRIPTION="Microsoft (R) C++ Runtime Library" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft (R) Visual C++" FILE_VERSION="6.00.8168.0" ORIGINAL_FILENAME="MSVCP60D.DLL" INTERNAL_NAME="MSVCP60D.DLL" LEGAL_COPYRIGHT="Copyright (C) Microsoft Corp. 1981-1998" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x862EE" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="6.0.8168.0" UPTO_BIN_PRODUCT_VERSION="6.0.8168.0" LINK_DATE="06/17/1998 16:26:48" UPTO_LINK_DATE="06/17/1998 16:26:48" VER_LANGUAGE="英语(美国) [0x409]" />
        <MATCHING_FILE NAME="Setup.exe" SIZE="1752630" CHECKSUM="0x7AE83100" BIN_FILE_VERSION="5.0.0.6" BIN_PRODUCT_VERSION="5.0.0.6" PRODUCT_VERSION="5, 0, 0, 6" PRODUCT_NAME="YingInstall" FILE_VERSION="5, 0, 0, 6" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="5.0.0.6" UPTO_BIN_PRODUCT_VERSION="5.0.0.6" LINK_DATE="12/07/2003 03:20:12" UPTO_LINK_DATE="12/07/2003 03:20:12" VER_LANGUAGE="语言中性 [0x0]" />
        <MATCHING_FILE NAME="ais.exe" SIZE="2539606" CHECKSUM="0x6E4DC511" BIN_FILE_VERSION="1.0.0.1" BIN_PRODUCT_VERSION="1.0.0.1" PRODUCT_VERSION="1, 0, 0, 1" FILE_DESCRIPTION="AISDemo Microsoft 基础类应用程序" COMPANY_NAME="" PRODUCT_NAME="AISDemo 应用程序" FILE_VERSION="1, 0, 0, 1" ORIGINAL_FILENAME="AISDemo.EXE" INTERNAL_NAME="AISDemo" LEGAL_COPYRIGHT="版权所有 (C) 2001" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="1.0.0.1" UPTO_BIN_PRODUCT_VERSION="1.0.0.1" LINK_DATE="05/27/2004 14:14:34" UPTO_LINK_DATE="05/27/2004 14:14:34" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="ais代码\DDRAW.DLL" SIZE="299008" CHECKSUM="0x7FE53CBA" BIN_FILE_VERSION="4.6.3.518" BIN_PRODUCT_VERSION="4.6.3.518" PRODUCT_VERSION="4.06.03.0518" FILE_DESCRIPTION="Microsoft DirectDraw" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft(R) DirectX for Windows(R)  95 and 98" FILE_VERSION="4.06.03.0518" ORIGINAL_FILENAME="ddraw.dll" INTERNAL_NAME="ddraw.dll" LEGAL_COPYRIGHT="Copyright (C) Microsoft Corp. 1994-1999" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x10004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x4A715" LINKER_VERSION="0x50000" UPTO_BIN_FILE_VERSION="4.6.3.518" UPTO_BIN_PRODUCT_VERSION="4.6.3.518" LINK_DATE="03/26/1999 20:52:50" UPTO_LINK_DATE="03/26/1999 20:52:50" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="ais代码\RES\DDRAW.DLL" SIZE="299008" CHECKSUM="0x7FE53CBA" BIN_FILE_VERSION="4.6.3.518" BIN_PRODUCT_VERSION="4.6.3.518" PRODUCT_VERSION="4.06.03.0518" FILE_DESCRIPTION="Microsoft DirectDraw" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft(R) DirectX for Windows(R)  95 and 98" FILE_VERSION="4.06.03.0518" ORIGINAL_FILENAME="ddraw.dll" INTERNAL_NAME="ddraw.dll" LEGAL_COPYRIGHT="Copyright (C) Microsoft Corp. 1994-1999" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x10004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x4A715" LINKER_VERSION="0x50000" UPTO_BIN_FILE_VERSION="4.6.3.518" UPTO_BIN_PRODUCT_VERSION="4.6.3.518" LINK_DATE="03/26/1999 20:52:50" UPTO_LINK_DATE="03/26/1999 20:52:50" VER_LANGUAGE="中文(中国) [0x804]" />
        <MATCHING_FILE NAME="ais代码\Release\AISDemo.exe" SIZE="2535481" CHECKSUM="0x9149DCB7" BIN_FILE_VERSION="1.0.0.1" BIN_PRODUCT_VERSION="1.0.0.1" PRODUCT_VERSION="1, 0, 0, 1" FILE_DESCRIPTION="AISDemo Microsoft 基础类应用程序" COMPANY_NAME="" PRODUCT_NAME="AISDemo 应用程序" FILE_VERSION="1, 0, 0, 1" ORIGINAL_FILENAME="AISDemo.EXE" INTERNAL_NAME="AISDemo" LEGAL_COPYRIGHT="版权所有 (C) 2001" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x4" VERFILETYPE="0x1" MODULE_TYPE="WIN32" PE_CHECKSUM="0x0" LINKER_VERSION="0x0" UPTO_BIN_FILE_VERSION="1.0.0.1" UPTO_BIN_PRODUCT_VERSION="1.0.0.1" LINK_DATE="06/17/2004 14:00:06" UPTO_LINK_DATE="06/17/2004 14:00:06" VER_LANGUAGE="中文(中国) [0x804]" />
    </EXE>
    <EXE NAME="MFC42.DLL" FILTER="GRABMI_FILTER_THISFILEONLY">
        <MATCHING_FILE NAME="mfc42.dll" SIZE="995383" CHECKSUM="0x4610F98C" BIN_FILE_VERSION="6.0.8665.0" BIN_PRODUCT_VERSION="6.0.4.0" PRODUCT_VERSION="6.0.400" FILE_DESCRIPTION="MFCDLL Shared Library - Retail Version" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft (R) Visual C++" FILE_VERSION="6.00.8665.0" ORIGINAL_FILENAME="MFC42.DLL" INTERNAL_NAME="MFCDLL" LEGAL_COPYRIGHT="Copyright (C) Microsoft Corp. 1993-1998" VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0xF4E02" LINKER_VERSION="0x60000" UPTO_BIN_FILE_VERSION="6.0.8665.0" UPTO_BIN_PRODUCT_VERSION="6.0.4.0" LINK_DATE="08/31/2001 22:58:58" UPTO_LINK_DATE="08/31/2001 22:58:58" VER_LANGUAGE="英语(美国) [0x409]" />
    </EXE>
    <EXE NAME="kernel32.dll" FILTER="GRABMI_FILTER_THISFILEONLY">
        <MATCHING_FILE NAME="kernel32.dll" SIZE="1091072" CHECKSUM="0x5526C2D2" BIN_FILE_VERSION="5.1.2600.1106" BIN_PRODUCT_VERSION="5.1.2600.1106" PRODUCT_VERSION="5.1.2600.1106" FILE_DESCRIPTION="Windows NT BASE API Client DLL" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Microsoft(R) Windows(R) Operating System" FILE_VERSION="5.1.2600.1106 (xpsp1.020828-1920)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="(C) Microsoft Corporation. All rights reserved." VERFILEDATEHI="0x0" VERFILEDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x10DAEB" LINKER_VERSION="0x50001" UPTO_BIN_FILE_VERSION="5.1.2600.1106" UPTO_BIN_PRODUCT_VERSION="5.1.2600.1106" LINK_DATE="09/09/2002 22:53:03" UPTO_LINK_DATE="09/09/2002 22:53:03" VER_LANGUAGE="中文(中国) [0x804]" />
    </EXE>
    </DATABASE>
      

  6.   

    debug好用,release不好用的原因
    我觉得是有两方面:内存越界和内存泄露
    装一个bundschecker,在debug单步调试吧
      

  7.   

    晕,楼主贴的这是-_-b不知道Release版的优化器把哪个不该优化的地方优化了,楼主可以试着把Release版里的优化级别之类的参数降一下试试看呢?
      

  8.   

    请问这两个USE MFC in a static library和USE mfc in shared DLL有什么区别?
    好象我用 USE mfc in shared DLL会好一些
      

  9.   

    文件VC98\MFC\SRC\WINOCC.CPP中的函数出错AttachControlSite(CHandleMap* pMap)(Unhandled exception in AISDemo.exe:0xc000005:Access Violation )
    void CWnd::AttachControlSite(CHandleMap* pMap)
    {
    if (this != NULL && m_pCtrlSite == NULL)
    {
    // Determine if parent is an OLE control container
    CWnd* pWndParent = (CWnd*)pMap->LookupPermanent(::GetParent(m_hWnd));
    if (pWndParent != NULL && pWndParent->m_pCtrlCont != NULL)
    {
    // delegate through helper in COleControlSite
    pWndParent->m_pCtrlCont->AttachControlSite(this);//这句出错
    }
    }
    }
      

  10.   

    请问这两个USE MFC in a static library和USE mfc in shared DLL有什么区别?
    --------------------
    一个是静态连接,直接把DLL编译到你的程序里
    共享连接就是在程序运行的时候才连接需要的DLL
      

  11.   

    把void CSerialPortTestDlg::OnSendMsgQCS()改为
    LRESULT  CSerialPortTestDlg::OnSendMsgQCS(WPARAM wParam,LPARAM lParam)后
    变成ntdll.dll出错?
    回答满意,马上给分。