MFC程序,DEBUG无问题,Release版直接挂掉
此时,程序未运行我新写的任何一段代码
挂掉时的堆栈:
MFC42! 73d31b5f()
MFC42! 73d31a58()
MFC42! 73dc847d()
USER32! 77d18734()
USER32! 77d18816()
USER32! 77d1b4c0()
USER32! 77d1b50c()
NTDLL! 7c92e473()
USER32! 77d1fecc()
USER32! 77d1ff66()
MFC42! 73d3bba4()
MFC42! 73d3dabd()
MFC42! 73d3e668()
MFC42! 73d3e614()
MFC42! 73d31e91()
MFC42! 73d31b9b()
MFC42! 73d31b05()
MFC42! 73d31a58()
MFC42! 73dc847d()
USER32! 77d18734()
USER32! 77d1d05b()
USER32! 77d1b4c0()
USER32! 77d1f9fe()
NTDLL! 7c92e473()
USER32! 77d1fecc()
USER32! 77d1ff66()
MFC42! 73d3bba4()
MFC42! 73d3d94d()
MFC42! 73d3d726()
MFC42! 73d3d675()
MFC42! 73d3f4f3()
MFC42! 73d42b8b()
MFC42! 73d324c0()
MFC42! 73d323bf()
MFC42! 73dcafca()
CUI_TemperMonitorApp::InitInstance() line 95 + 12 bytes
MFC42! 73d3cf74()
KERNEL32! 7c816fe7()代码显示死在App类的InitInstance函数中:
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
// cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
ParseCommandLine(cmdInfo); // Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;
即调用ProcessShellCommand(cmdInfo)函数时,我知道这个函数是创建新文档的,
Debug跟进去没发现任何问题,但是Release附加了调试信息也进不去苦觅无果,现散分求解,望高人相助!

解决方案 »

  1.   

    ProcessShellCommand出错,主要看一下MainFrame,视图类和文档类的初始化函数,一般都是这些初始化有问题。你可以分别加日志输出来看运行到何处出现问题。
    一点注意:不要认为debug行,release就一定行。
      

  2.   

    检查一下Debug,Release版本之间的工程设置,以及相关配置文件等是否一样,是否用到其他dll等
      

  3.   

    if (!ProcessShellCommand(cmdInfo))
    return FALSE; 
    这句注释掉Release就没问题吗?
      

  4.   

    设置静态链接MFC和使用静态的c runtime,重新编译再看看。
      

  5.   

    你的VC是哪个版本?程序使用的是哪种视图类?文档、框架、视图类中有无特殊的类对象成员?
    在ParseCommandLine之前执行了哪些代码?
      

  6.   

    版本是VC6,SDI,视图类中使用了一个自定义的ListCtrl控件类成员,这个控件采用DLL实现的目前缩小了范围,发现是调用CMainFrame::OnCreate中一句:
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
    挂掉的继续等待高人哦
      

  7.   

    那dll的也得用release的,需要对应使用
      

  8.   


    直接注释掉,m_pMainWnd都是NULL,后面就直接空指针访问了
      

  9.   

    前面不是说没有执行到自己的代码吗?既然可以查到CMainFrame中,在继续查查看,在视图类的构造和初始化函数上设置断点或输出日志看看。另外把那个ListCtrl控件先注释掉看看。
      

  10.   

    执行CMainFrame::OnCreate是ParseCommandLine干的,我是在CMainFrame::OnCreate函数添加MessageBox才发现的,另外继续深入了一下,发现是是调用view类的Create函数挂掉得,但是我的View类的PreCreateWindow调用没有问题
    难道是我的view类的原因引起来的
      

  11.   

    View的PreCreateWindow没有问题,那么OnInitUpdate有没有问题呢
      

  12.   

    事实上,OnInitUpdate被我重载了,而且根本没调用就挂了
      

  13.   

    注意视图类中使用的对象,估计就是那个ListCtrl的问题。
      

  14.   

    唉,现在根本不好找到底断在哪里,Release版太不好查了
    MainFrame、view和doc类的初始化都查过,仅仅也就知道一个范围
      

  15.   

    你给Release配置加上调试信息,设置断点调试,不行吗?