首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

老掉牙C++程序调试出错,求解决

2013-09-06 
老C++程序调试出错,急求解决!2005年的老程序,有源码,但是没有其他任何文档资料。改了一点东西在本地XP虚拟

老C++程序调试出错,急求解决!
2005年的老程序,有源码,但是没有其他任何文档资料。改了一点东西在本地XP虚拟机的VC6环境下编译调试都通过,EXE文件可执行,无任何压力,但是把EXE文件覆盖到服务器上运行,服务器为win2003企业版,点击EXE打开窗口就报错,错误截图如下:
老掉牙C++程序调试出错,求解决
后来在服务器上安装VC6,把原始工程拷贝到服务器上调试执行一样报错,但是本地XP虚拟机毫无压力,由于本人从事JAVA开发,对C++可以说是门外汉,已经网络搜索错误解决方法一直没法解决,大多数都说这种错误是代码问题,变量初始化等等原因,但是调试跟踪的那段代码都没有动过。
如果看不到图,文字描述错误:
打开窗口,弹出错误提示:Debug Assertion Failed!From:定位在EXE文件,File:afxwin2.inl,Line:96,堆栈里面定位的代码片段如下(看起来好像是VC自动生成的):

BOOL CMsgDispatcherApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls();// Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic();// Call this when linking to MFC statically
#endif

// Change the registry key under which our settings are stored.
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));

LoadStdProfileSettings();  // Load standard INI file options (including MRU)

// Register the application's document templates.  Document templates
//  serve as the connection between documents, frame windows and views.

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMsgDispatcherDoc),
RUNTIME_CLASS(CMainFrame),       // main SDI frame window
//RUNTIME_CLASS(CReChargeGwView));
RUNTIME_CLASS(CMessageView));
AddDocTemplate(pDocTemplate);

// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;

// The one and only window has been initialized, so show and update it.


m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}


堆栈错误指向在return ture这个地方,望有高手帮忙解决,解决后100分立马发放,谢谢!!! c++ windows 调试
[解决办法]
断言错误,应该比较好找,看看ASSERT的位置,会知道什么东西不合法了
[解决办法]
改出来的错误,或潜藏的错误!
改出来的,应该是类定义错,析构函数错误或者产生了异常!
[解决办法]
这段代码是MFC单文档工程自动生成的,return出错,有可能是析构函数有问题
其中:
 CSingleDocTemplate* pDocTemplate;     
pDocTemplate = new CSingleDocTemplate(         
IDR_MAINFRAME,        
 RUNTIME_CLASS(CMsgDispatcherDoc),         
RUNTIME_CLASS(CMainFrame),       // main SDI frame window 
// RUNTIME_CLASS(CReChargeGwView));         
RUNTIME_CLASS(CMessageView));    
 AddDocTemplate(pDocTemplate); 
这段是创建文档模板用的,用到的资源很多,确定一下里边的字符串资源IDR_MAINFRAME,和类CMsgDispatcherDoc、CMainFrame、CReChargeGwView、CMessageView、pDocTemplate是不是和你想要的一样,里边你应该看到他注释了一行:// RUNTIME_CLASS(CReChargeGwView));这说明文档模板应该是自定义的,修改过的,这段代码牵涉很广,好好看看那几个资源。

还有就是你的工程是一运行就出这个错误,还是打开某个窗口的时候才出?

你用F5运行(调试模式),出了这个错误,你点继续执行,应该是可以定位到更深层次的错误代码,这是断言错误,你可以查一下是哪个断言错误,断言错误一般就是你查的那些(指针为空,某个变量初始化有问题等等),你看看查查是哪个变量出了问题。
[解决办法]
不知道你程序所创建的窗口的相关设置是不是从另外的配置文件读取的,如果是的话,检查一下你的配置文件是否放到正确的地方并且成功读取了
[解决办法]
我怀疑是不是句柄丢失
[解决办法]
应该是断言警告,忽略能过去的吧
[解决办法]
目测有可能是缺少某个界面上的控件。
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

------解决方案--------------------



其中CMsgDispatcherApp::InitInstance() line 97就是指向在return TRUE这句话这里,小弟实在不太懂C++,还望继续指点老掉牙C++程序调试出错,求解决

加载相应DLL对应的的符号文件.pdb或用BEBrowse Professional软件查看相应dll,
将Call Stack中的十六进制地址手动翻译为对应exports的函数名应该有助于调试。

热点排行