VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 727|回复: 2
打印 上一主题 下一主题

[交流] 发一套自己写的捕获异常并打印调用堆栈的代码

[复制链接]
61_avatar_middle
最佳答案
0 
跳转到指定楼层
1#
在线会员 发表于 2018-8-30 22:13:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
像python、java那样的一般在出错的时候会打印崩溃的堆栈方便查找,而在Windows平台上经常弹一个错误的框框,光这样很难找到对应出错的代码位置,所以这里利用了Windows的SEH机制在程序崩溃时根据线程环境打印出异常原因以及函数调用的堆栈,特此发出来与大家分享
测试代码
  1. void Func5()
  2. {
  3.         CBaseException sw;
  4.         sw.ShowCallstack();
  5. }

  6. void Func4()
  7. {
  8.         Func5();
  9. }
  10. void Func3()
  11. {
  12.         Func4();
  13. }
  14. void Func2()
  15. {
  16.         Func3();
  17. }
  18. void Func1()
  19. {
  20.         Func2();
  21. }

  22. void StackWalkTest()
  23. {
  24.         Func1();
  25. }

  26. void ExceptionTest()
  27. {
  28.         int i = 1;
  29.         int c = i / 0;
  30. }

  31. void TryTest()
  32. {
  33.         try
  34.         {
  35.                 SET_DEFAUL_EXCEPTION();
  36.                 int *p = NULL;
  37.                 *p = 0;
  38.         }
  39.         catch (CBaseException &e)
  40.         {
  41.                 e.ShowExceptionInformation();
  42.         }
  43. }
  44. int _tmain(int argc, TCHAR* argv[])
  45. {
  46.         SET_DEFULTER_HANDLER();
  47.         CBaseException be;
  48.         be.ShowLoadModules();
  49.         StackWalkTest();
  50.         TryTest();//调用异常处理

  51.         ExceptionTest();
  52.         return 0;
  53. }
复制代码


打印的部分结果
发一套自己写的捕获异常并打印调用堆栈的代码

源码: 发一套自己写的捕获异常并打印调用堆栈的代码 Crash.zip (16.7 KB, 下载次数: 10)

评分

参与人数 1威望 +2 驿站币 +2 +2 收起 理由
51_avatar_small Syc + 2 + 2 + 2 感谢分享!

查看全部评分





上一篇:分享一套C++基础试题
下一篇:32位和64位下各种数据类型大小的对比
51_avatar_middle
最佳答案
11 
2#
online_admins 发表于 2018-8-30 23:23:07 | 只看该作者
这个不错哦~支持分享
51_avatar_middle
最佳答案
0 
3#
在线会员 发表于 2018-9-3 15:57:28 | 只看该作者
这个不错,谢谢分享,有用
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-12-15 04:58

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表
时时彩平台排名