CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

程序崩溃时,怎么得到调用栈?有什么API可以用?

楼主fatacy(fatacy)2006-07-03 20:25:27 在 VC/MFC / 进程/线程/DLL 提问

程序崩溃时,怎么得到调用栈?我看到有人能够得到调用栈的详细信息,包括函数名,参数值,而且大部分是准确的。如果答案是MSJExceptionHandler就免了,请达人赐教! 问题点数:20、回复次数:19Top

1 楼fatacy(fatacy)回复于 2006-07-04 09:26:51 得分 0

自己up一下Top

2 楼hxzb7215191(天行健,君子以自强不息)回复于 2006-07-04 09:50:31 得分 0

mark   一下,呵呵.  
   
  学习Top

3 楼xx_jj()回复于 2006-07-04 09:51:19 得分 0

调试啊Top

4 楼fatacy(fatacy)回复于 2006-07-04 09:57:32 得分 0

release版的,只在客户机上出现Top

5 楼fatacy(fatacy)回复于 2006-07-04 14:41:59 得分 0

还没有答案,别沉啊Top

6 楼yellowdawnhlm(bourne)回复于 2006-07-04 15:31:36 得分 10

release版本必须要有pdb文件才可以获取到是具体的崩溃行地址,codeproject上面有一篇文章,你可以去搜索一下。Top

7 楼fatacy(fatacy)回复于 2006-07-04 15:49:45 得分 0

多谢,但还需要更多信息,比如调用栈,因为有时候错误并不是出在罪顶层调用。Top

8 楼dch4890164(巴拉克)回复于 2006-07-04 16:26:23 得分 0

捕获异常不行吗?Top

9 楼fatacy(fatacy)回复于 2006-07-04 17:34:59 得分 0

可以捕获异常,但关键是不知道哪里出错,也就不知道怎么修改问题Top

10 楼fatacy(fatacy)回复于 2006-07-05 10:50:50 得分 0

知道怎么trace   call   stack了,但仍然不知道怎么得到每个函数名,参数名?Top

11 楼he_sl(he_sl)回复于 2006-07-05 10:54:36 得分 0

关注Top

12 楼LuoMuFeng(罗穆峰)回复于 2006-07-05 14:22:43 得分 0

Release版中是不包含函数名、参数名、变量名等信息的,我劝楼主不要白费力气了。  
  除非你自己在代码中把这些信息记录下来。呵呵。Top

13 楼Stefine(CSDN最菜滴猩猩)回复于 2006-07-05 17:31:21 得分 0

根据崩溃时的异常信息可以判断一部分  
   
  比如有时数据库连接有问题时都会报相应的错误代码,及一些附加的说明  
   
  最好的方式应该是看清代码,找出可疑之处   下断点跟踪或用throw   catchTop

14 楼lineuser(蓝冰)回复于 2006-07-27 08:54:44 得分 0

我也在找这个,有点话一起分享阿Top

15 楼wenbo_ying(应)回复于 2006-07-27 10:00:08 得分 0

用minidump  
  在app的InitInstance()中调用  
  ::SetUnhandledExceptionFilter(TopLevelFilter);  
  定义TopLevelFilter:  
  LONG   WINAPI   TopLevelFilter(   struct   _EXCEPTION_POINTERS   *pExceptionInfo   )  
  {  
  LONG   ret   =   EXCEPTION_CONTINUE_SEARCH;  
  CString   strDumpFile;  
  CTime   tmNow   =   CTime::GetCurrentTime();  
  strDumpFile   +=   tmNow.Format("%m%d   %H%M%S");  
  strDumpFile   +=   ".dmp";  
  HANDLE   hFile   =   ::CreateFile(strDumpFile,   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;  
   
  //   write   the   dump  
  BOOL   bOK   =   MiniDumpWriteDump(   GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,   &ExInfo,   NULL,   NULL   );  
  ret   =   EXCEPTION_EXECUTE_HANDLER;  
  ReStart(FALSE);//重启程序  
  ::CloseHandle(hFile);  
  }  
  return   ret;  
  }  
   
  需要用到dbghelp.dll,dbghelp.lib,dbghelp.h,在VS2005下面有的  
  编译的时候,要生成pdb文件  
  然后用windbg就能看到当时的调用栈Top

16 楼BeRoy(失眠)回复于 2007-02-07 10:14:20 得分 0

学习Top

17 楼xingboy()回复于 2007-02-08 11:44:48 得分 0

STACKFRAME   CallStack;  
  ZeroMemory(   &CallStack,   sizeof(CallStack)   );  
  CallStack.AddrPC.Offset         =   ct.Eip;  
  CallStack.AddrStack.Offset   =   ct.Esp;  
  CallStack.AddrFrame.Offset   =   ct.Ebp;  
  CallStack.AddrPC.Mode             =   AddrModeFlat;  
  CallStack.AddrStack.Mode       =   AddrModeFlat;  
  CallStack.AddrFrame.Mode       =   AddrModeFlat;  
   
  while(StackWalk(   IMAGE_FILE_MACHINE_I386,   DebugProcessInfo.ProcessInfo.hProcess,   hThread,   &CallStack,    
  NULL,   NULL,   SymFunctionTableAccess,   SymGetModuleBase,   NULL   ))  
  {  
  if(   (DWORD)CallStack.AddrReturn.Offset>CodeImageBase   &&   (DWORD)CallStack.AddrReturn.Offset<CodeImageEnd   )  
  {  
                                  return   CallStack.AddrReturn.Offset;  
  }  
  }Top

18 楼yjgx007(还不结帖?!听妈妈的话! http://www.geekclaw.com)回复于 2007-02-08 11:52:19 得分 10

http://www.codeproject.com/threads/StackWalker.aspTop

19 楼wangk(倒之)回复于 2007-02-08 12:27:49 得分 0

AfxDumpStackTop

相关问题

关键词

得分解答快速导航

  • 帖主:fatacy
  • yellowdawnhlm
  • yjgx007

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo