首页
社区
课程
招聘
使用
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-24 10:36
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
MSGG05 sunbinjin AddVectoredExceptionHandler是可以捕获到,但是可能是它优先级太高,导致了整个程序其它地方的异常处理都 ...
是的,这个确实非常有需求,现实情况就是微软貌似没考虑好。
包括google的源码也仅仅是用了SetUnhandledExceptionFilter
微软完全有能力处理所有异常并写出dmp文件,但是它就是不做。
我在网上找到了个写Error Report的注册表的,那个就是free 2次闪退它都能生成dmp,但是它不是程序控制的。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-23 12:17
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
MSGG05 我测了一下确实是捕获不到,不过你可以试一下AddVectoredExceptionHandler函数。我测试了是可以捕获到重复free的问题的,成功生成了问题Dump
AddVectoredExceptionHandler是可以捕获到,但是可能是它优先级太高,导致了整个程序其它地方的异常处理都被它拦截了,干扰了vc runtime的内部seh异常处理。
所以这个貌似不能用。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-22 16:55
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ookkaa https://gclxry.com/article/catch-all-exceptions-in-visual-cpp/ 都说了在开一个进程,这么多异常不说能不能处理,万一前面的exptionf ...

网上说的google的breakpad,就是你说的进程外生成dump,结果还是这几个函数的组合而已,

现在是这些函数捕获不到,所在google的也没用。


https://blog.csdn.net/weixin_34032792/article/details/86417387


最后于 2021-5-22 16:56 被sunbinjin编辑 ,原因:
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-22 10:29
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ninebell sunbinjin 你也是想知道他在哪退出的是吧? 我所知道的api,自杀式的是ExitProcess 它杀式的就是TerminateProc ...

程序自己都检测到堆栈溢出了,应该是字符串复制过界了。

雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-22 10:10
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ninebell sunbinjin 你也是想知道他在哪退出的是吧? 我所知道的api,自杀式的是ExitProcess 它杀式的就是TerminateProc ...
我的问题都没搞定的话,貌似也没办法解释你的程序是哪种退出机制。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-22 10:09
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
MTRush windbg可行?
不是研发自己抓,而是程序抓了生成dump发回来研发再分析。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-22 10:08
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
MSGG05 这个好像还有一个是runtime在崩溃时会重新调用SetUnhandledExceptionFilter(NULL)之类的将异常处理函数强制重置成默认的,这样你设置的就失效了。很多做法是自己设置完把这 ...
这个我在正式程序里也做了,能解决一些其它模块私自修改导致我主程序抓不住的情况
但对一个指针free 2次还是抓不住。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-21 10:08
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ninebell @sunbinjin[img]https://attach.52pojie.cn/forum/202105/19/113942jvfe9vdva9oau9o5.png[/img][img]https: ...
你也是想知道他在哪退出的是吧?
我所知道的api,自杀式的是ExitProcess
它杀式的就是TerminateProcess,参数传自己
什么exit内部都会调用到ExitProcess
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-21 09:25
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
sonyps 不是不能捕获是你的代码被优化编译了吧,因为调试版就能捕获到。
release没有优化掉,程序会出错,导致后面的代码Messagebox没有被执行。
debug是会被vs捕获到,不知道vs是如何做到的,vs的开发人员肯定这方面都知道如何处理。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 18:59
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
再开一个进程,只是处理生成dump的事。
但也得先捕获到异常吧?我现在是捕获不到啊。
我看到别的文章说google跨进程生成dump,但它也是本进程捕获到后才跨进行生成dump的啊。如果捕获不到,vcruntime直接给你退了,跨进程也不能生成dump啊?

另外我看下你的链接,里面多了几个函数,我试一下。
不知道是不是我们两的沟通不在同一个频道?
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 18:56
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
sonyps 最后一句改成 int i=0; exit(100/i);就可以捕获了。
你这是另一种异常,异常类型太多,我上面示例代码里的如何让它捕获到呢?
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 16:34
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ookkaa 你的谷歌浏览器就有GoogleCrashHandler.exe
我现在的问题不是生成不了dump,而是捕获不到异常
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 15:33
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
sonyps 你这种估计是程序内存满了导致的异常,你此时再想写文件保存,可是写入操作也需要分配内存,进而导致了还没写成功就被系统提前终止运行了。
应该是某些runtime内部出错直接退出来,我是想如何抓住错误生成dump,我上面的代码示例就证明有些错误我现在没办法捕获。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 15:32
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
10ngvv 以调试方式启动程序不行?奔溃直接断点分析
生成dump是为了在别的机器上抓回来分析,调试不可行的。
有可能是在客户机器上。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-5-20 14:25
0
如何抓住程序在哪里退出的?想用于出错时生成Dump
ookkaa 建立一个新的进程监视,MSDN本来就不推荐自己的程序里MiniWriteDump
抓不住的情况下,另一个进程就能抓住了吗?这块没区别吧?
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-4-21 15:19
0
[讨论]请教chia原理
superlover 硬盘相当于一块地,chia把地分给农民开垦,播种施肥过程当然很辛苦了,直到有一天长出了果实:郁金香。然后就可以拿去卖钱钱了。 有效的解决了荒地无人耕种的难题,实现了人类生产力爆发的意义。
这玩意P盘慢得跟鬼似得
要命
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-3-9 09:33
0
[求助]如何比较简单的获取C++接口的某个方法的地址?
孤山散人 这个宏用于取成员变量的地址,Present是个成员函数。函数地址一般是固定的,直接用& 符号就行。
不行的,第一贴就已经写出来的,&成员函数不支持,可能是编译器故意做了限制。
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
sunbinjin 1 2021-3-9 09:32
0
[求助]如何比较简单的获取C++接口的某个方法的地址?
hzqst 一般常规做法都是用索引去虚表里强行取
我现在就是这么取的,我的意思是有什么办法不用人为去算那个偏移,有时候会数错,也麻烦,而是借用编译器来知道这个偏移,本身编译器是知道的。
精华数
RANk
174
雪币
620
活跃值
关注数
粉丝数
0
课程经验
0
学习收益
0
学习时长
基本信息
  能力排名: No.2038
  等    级: LV4
活跃值  活跃值:活跃值
  在线值:
  浏览人数:291
  最近活跃:2023-6-14 16:02
  注册时间:2004-05-28
勋章
能力值

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册