首页
社区
课程
招聘
如何抓住程序在哪里退出的?想用于出错时生成Dump
发表于: 2021-5-20 10:09 5160

如何抓住程序在哪里退出的?想用于出错时生成Dump

2021-5-20 10:09
5160
收藏
免费 0
支持
分享
最新回复 (31)
雪    币: 35739
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
26
sunbinjin 程序自己都检测到堆栈溢出了,应该是字符串复制过界了。
求一个简单的delphi堆栈溢出的实现源码;
我看这挺好,搞点暗桩儿也甭调试了。
2021-5-22 11:48
0
雪    币: 5167
活跃值: (3430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SAO
27
大佬们,请教一下dump的原理,比如x32dbg里dump插件dump的时候仅仅是读当前正在调试进程的内存数据然后写入文件吗?查dump原理的资料发现网上资料好少
2021-5-22 15:30
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
28
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编辑 ,原因:
2021-5-22 16:55
0
雪    币: 6893
活跃值: (3474)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
sunbinjin 这个我在正式程序里也做了,能解决一些其它模块私自修改导致我主程序抓不住的情况 但对一个指针free 2次还是抓不住。
我测了一下确实是捕获不到,不过你可以试一下AddVectoredExceptionHandler函数。我测试了是可以捕获到重复free的问题的,成功生成了问题Dump
2021-5-22 19:37
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
30
MSGG05 我测了一下确实是捕获不到,不过你可以试一下AddVectoredExceptionHandler函数。我测试了是可以捕获到重复free的问题的,成功生成了问题Dump
AddVectoredExceptionHandler是可以捕获到,但是可能是它优先级太高,导致了整个程序其它地方的异常处理都被它拦截了,干扰了vc runtime的内部seh异常处理。
所以这个貌似不能用。
2021-5-23 12:17
0
雪    币: 6893
活跃值: (3474)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
sunbinjin AddVectoredExceptionHandler是可以捕获到,但是可能是它优先级太高,导致了整个程序其它地方的异常处理都被它拦截了,干扰了vc runtime的内部seh异常处理。 所以这个貌 ...

这个我倒是没试过,但是原则上来说微软不大可能让这些接口有这么大的副作用的。有时间的话还真的可以研究下这个,自身产生dump这个对程序后期排查难重现错误还是蛮有用的。

最后于 2021-5-23 20:20 被MSGG05编辑 ,原因:
2021-5-23 20:18
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
MSGG05 sunbinjin AddVectoredExceptionHandler是可以捕获到,但是可能是它优先级太高,导致了整个程序其它地方的异常处理都 ...
是的,这个确实非常有需求,现实情况就是微软貌似没考虑好。
包括google的源码也仅仅是用了SetUnhandledExceptionFilter
微软完全有能力处理所有异常并写出dmp文件,但是它就是不做。
我在网上找到了个写Error Report的注册表的,那个就是free 2次闪退它都能生成dmp,但是它不是程序控制的。
2021-5-24 10:36
0
游客
登录 | 注册 方可回帖
返回
//