紧急求助,关于分析dump文件

lovelyzuzu 2013-01-08 10:53:20
程序有时候会异常,但是根据系统日志看异常的地址不是我程序的内存地址,现在工程生成了map 文件,也有pdb文件,和异常时候的dump文件,怎么通过wdbg查找程序异常的原因?
...全文
357 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelyzuzu 2013-11-07
  • 打赏
  • 举报
回复
推荐个好点的抓dump工具或者方法吧,我让程序自己生成,结果不成功。
ToConnection 2013-01-29
  • 打赏
  • 举报
回复
vc2010自带调试.dmp LONG WINAPI TopLevelFilter( struct _EXCEPTION_POINTERS *pExceptionInfo ) { LONG ret = EXCEPTION_CONTINUE_SEARCH; time_t nowtime; time(&nowtime); struct tm *pTime = localtime(&nowtime); char szFile[128] = {0}; sprintf(szFile, "%4d.%02d.%02d_%02d.%02d.%02d.dmp", pTime->tm_year+1900, pTime->tm_mon+1, pTime->tm_mday, pTime->tm_hour, pTime->tm_min, pTime->tm_sec); char szPath[MAX_PATH]; ::GetModuleFileName(NULL,szPath,MAX_PATH); CString strPath = szPath; int index = strPath.ReverseFind(_T( '\\')); strPath = strPath.Left(index + 1); if (index>0) { strPath = strPath.Left(index); } else { strPath.Empty(); } CString sName=szFile; CString sPath=strPath+"\\"+szFile; HANDLE hFile = ::CreateFile(sPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); /*HANDLE hFile = ::CreateFile(szFile, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);*/ if (hFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION ExInfo; ExInfo.ThreadId = ::GetCurrentThreadId(); ExInfo.ExceptionPointers = pExceptionInfo; ExInfo.ClientPointers = NULL; MINIDUMP_TYPE MiniDumpWithDataSegs = MiniDumpNormal ; // write the dump BOOL bOK = MiniDumpWriteDump( GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpWithDataSegs, &ExInfo, NULL, NULL ); ret = EXCEPTION_EXECUTE_HANDLER; ::CloseHandle(hFile); //让程序自动重启 // SetUnhandledExceptionFilter(ReStart_UnhandledExceptionFilter); char pBuf[MAX_PATH]; //获取应用程序完全路径,比 GetCurrentDirectory 好用多了 GetModuleFileName(NULL,pBuf,MAX_PATH); STARTUPINFO startupinfo; PROCESS_INFORMATION proc_info; memset(&startupinfo,0,sizeof(STARTUPINFO)); startupinfo.cb=sizeof(STARTUPINFO); // 最重要的地方 ::CreateProcess(pBuf,NULL,NULL,NULL,FALSE, NORMAL_PRIORITY_CLASS,NULL,NULL,&startupinfo,&proc_info); } return ret; } int CRCServerUIApp::Run() { ::SetUnhandledExceptionFilter(TopLevelFilter); BOOL bRun = TRUE; BOOL bExit=FALSE; while(!bExit) { bRun= CWinApp::Run(); bExit=TRUE; } return bRun; }
zcchm 2013-01-29
  • 打赏
  • 举报
回复
既然有pdb了,map文件就是鸡肋,不用也罢。
zcchm 2013-01-29
  • 打赏
  • 举报
回复
WARNING: Stack unwind information not available. Following frames may be wrong. 明显是你pdb不对,没有成功加载符号表。检查一下你的AppPlus.pdb与你的AppPlus.exe是否一致。
lovelyzuzu 2013-01-29
  • 打赏
  • 举报
回复
显示最近的不是一个函数,而是显示的这样的

STACK_TEXT:  
0012f484 7c806ced 40010006 00000000 00000002 kernel32!RaiseException+0x53
0012f6f0 0040b971 00475d84 0000235f 00000000 kernel32!OutputDebugStringA+0x2ce
WARNING: Stack unwind information not available. Following frames may be wrong.
0012f7ac 77e25f82 0044595e 00070154 00000110 AppPLUS+0xb971
0012f828 77e25e22 00000000 0044595e 00070154 user32!UserCallDlgProcCheckWow+0x147
0012f870 77e2fbee 00000000 00000110 000400de user32!DefDlgProcWorker+0xa8
0012f88c 77e2b6e3 00070154 00000110 000400de user32!DefDlgProcA+0x22

///////////////////////////////////////
0012f7ac 77e25f82 0044595e 00070154 00000110 AppPLUS+0xb971 这里AppPlus是我的应用程序
这里AppPLUS+0xb971 的0xb971这个是我应用程序的内存地址吗?我根据这个查找map文件,这个地址的不可能出错啊?
zcchm 2013-01-29
  • 打赏
  • 举报
回复
所以建议还是尽量使用调试工具直接抓取dump。
zcchm 2013-01-29
  • 打赏
  • 举报
回复
使用MiniDumpWriteDump有一个问题,就是获取不到异常发生时callstack。而callstack大部分时候是非常重要的。
九州剑王 2013-01-14
  • 打赏
  • 举报
回复
引用 10 楼 lovelyzuzu 的回复:
这个 !analyze-v 基本的还是 会的,后面跟踪了内存堆栈,但是不懂汇编,不知道调用的那个函数引发的。
analyze -v后基本上离异常点最近的你的函数,就是出问题的地方
lovelyzuzu 2013-01-14
  • 打赏
  • 举报
回复
这个 !analyze-v 基本的还是 会的,后面跟踪了内存堆栈,但是不懂汇编,不知道调用的那个函数引发的。
这不是鸭头 2013-01-10
  • 打赏
  • 举报
回复
配置源码路径,配置symbol路径,配置Image文件路径。打开dump文件。 输入: !analyze-v
cy2005abc 2013-01-10
  • 打赏
  • 举报
回复
ding...
lovelyzuzu 2013-01-09
  • 打赏
  • 举报
回复
这个问题难倒我了
jimette 2013-01-08
  • 打赏
  • 举报
回复
http://hi.baidu.com/isafesoft/item/b0f997c5135f5a74cfd4f81e lz是windbg把?
lovelyzuzu 2013-01-08
  • 打赏
  • 举报
回复
我是vc6 直接从file打开dump文件不能运行的。pdb文件和dump文件以及map文件放一起的。 vc6不能吗?
mangshe0 2013-01-08
  • 打赏
  • 举报
回复
对不起 所答非所问了 呵呵 以上是我自己的使用dump的经验 见笑了
mangshe0 2013-01-08
  • 打赏
  • 举报
回复
用dump 文件 放在 pdb文件 同一目录 最好 你是编译的整个工程源码 也都在 然后用vs打开dump 运行 它会调用pdb找出cpp等对应原文件 显示异常的位置 dump保存部分变量信息,可以设置让他多存一些,但是栈内信息好像是存不下来。 最后注意一下 一定是产生dump的文件 与你pdb源文件是匹配的(就是一波生成的),哪怕重新编译的也会匹配不上。
Eleven 2013-01-08
  • 打赏
  • 举报
回复
用windbg加载dump文件
debugmonkey 2013-01-08
  • 打赏
  • 举报
回复
符号正确的话 用windbg加载dump 输入!analyze -v命令就可以看到一些有价值的信息了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧