如何捕获DLL中的异常
社区
进程/线程/DLL 帖子详情 如何捕获DLL中的异常 andy_cai 2013-08-21 05:53:57 现在我需要调用一个DLL完成较复杂的事务
而这个DLL本身也是多线程的
我发现这个DLL有时会出现很严重的错误
比如非法内存读写等等
从而导致整个软件崩溃推出
我该用什么方法来捕获这些异常?
再说一下,这个DLL本身也是多线程的
...全文
1417 17 打赏 收藏 如何捕获DLL中的异常 现在我需要调用一个DLL完成较复杂的事务 而这个DLL本身也是多线程的 我发现这个DLL有时会出现很严重的错误 比如非法内存读写等等 从而导致整个软件崩溃推出 我该用什么方法来捕获这些异常? 再说一下,这个DLL本身也是多线程的 复制链接
扫一扫 分享 转发到动态 举报
写回复 配置赞助广告取 消
确 定
用AI写文章 17 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 赵4老师 2013-10-30 打赏举报 回复 引用 16 楼 windbger 的回复:程序异常crash,抓取dump,最灵活的工具当属微软调试工具包中的adplus。
http://support.microsoft.com/kb/286350
学习了。 BeanJoy 2013-08-23 打赏举报 回复 这篇文章是否有用使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP? windbger 2013-08-23 打赏举报 回复 程序异常crash,抓取dump,最灵活的工具当属微软调试工具包中的adplus。
http://support.microsoft.com/kb/286350 andy_cai 2013-08-23 打赏举报 回复 我还是说明一下条件限制吧,希望各位大侠耐心看一下。
我需要调用第三方DLL,该DLL会创建线程。
现在我认为该DLL存有问题,但我的开发环境没法run这个DLL(因为和设备相关)
所以只能在发布环境中捕获错误信息。 andy_cai 2013-08-23 打赏举报 回复 引用 12 楼 tiger9991 的回复:[quote=引用 9 楼 andy_cai 的回复:]
[quote=引用 5 楼 tiger9991 的回复:]
SetUnhandledExceptionFilter
这个方法不错的,我也用这个
楼主去搜索输出dump文件。
怎么这个方法在release下不起作用?[/quote]
你如果没源码就没用了,另外最好用高版本的VS,我测试在VS2005经常不起作用,但是VS2010运行良好[/quote]
好吧,我的确用的是VS2005。
由于一些原因,目前该项目还不能使用VS2010。 andy_cai 2013-08-23 打赏举报 回复 引用 10 楼 zhao4zhong1 的回复:开始、运行、drwtsn32
华生医生记录的信息不够详细
看不见的裂痕 2013-08-23 打赏举报 回复 引用 9 楼 andy_cai 的回复:[quote=引用 5 楼 tiger9991 的回复:]
SetUnhandledExceptionFilter
这个方法不错的,我也用这个
楼主去搜索输出dump文件。
怎么这个方法在release下不起作用?[/quote]
你如果没源码就没用了,另外最好用高版本的VS,我测试在VS2005经常不起作用,但是VS2010运行良好 andy_cai 2013-08-23 打赏举报 回复 引用 8 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
我需要在发布环境下使用
所以你说的这个方式不行
刚才试了一下SetUnhandledExceptionFilter
在release下也没用起来
我不知道是不是什么地方弄错了 赵4老师 2013-08-23 打赏举报 回复 开始、运行、drwtsn32 andy_cai 2013-08-23 打赏举报 回复 引用 5 楼 tiger9991 的回复:SetUnhandledExceptionFilter
这个方法不错的,我也用这个
楼主去搜索输出dump文件。
怎么这个方法在release下不起作用? 赵4老师 2013-08-23 打赏举报 回复 崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
andy_cai 2013-08-23 打赏举报 回复 引用 6 楼 BeanJoy 的回复:这篇文章是否有用使用SetUnhandledExceptionFilter转储程序崩溃时内存DMP?
肯定有用,谢了。
等我这边有了实践结果,再回复结贴。
其他人如果还有另外的方法,我会追加分数的。 看不见的裂痕 2013-08-22 打赏举报 回复 SetUnhandledExceptionFilter
这个方法不错的,我也用这个
楼主去搜索输出dump文件。 andy_cai 2013-08-22 打赏举报 回复 引用 3 楼 oyljerry 的回复:本质上还是应该解决掉DLL中的异常问题
你说的是理,可这部分内容不受我控制。
并且我不是很想为这个DLL的使用创建单独进程
因为设计到一些较为复杂的状态更新 oyljerry 2013-08-21 打赏举报 回复 本质上还是应该解决掉DLL中的异常问题 oyljerry 2013-08-21 打赏举报 回复 SetUnhandledExceptionFilter等,然后重启 珍惜生命远离CPP 2013-08-21 打赏举报 回复 __try
dll里面创建线程的话 ,就没办法了,只能改dll的代码了 C# 捕获C/C++异常的例子 C# 捕获C/C++异常的例子 Breakpad 抓取crash生成dump的dll动态链接库和测试代码 将Google_breakpad中Exception_Handler部分提取出来打包封装成动态链接库,在原代码基础上增加宏定义,以及导出函数代码 基于开源CrashRpt与微软开源Detours技术深度改造的异常捕获库分享 在应用程序中安装一个异常捕获模块,已经成为一种标配了。通过这个异常捕获模块,去感知(捕获)应用程序中发生的异常或崩溃,自动生成包含异常上下文的dump文件。事后使用Windbg去分析dump文件,去分析软件异常!这一策略和方式,对于一些很难复现的问题,或者只在客户环境中才能出现的问题,非常有用!
当前深度改造的异常捕获库,极大地提高了异常捕获的效率,几乎可以捕获到所有的异常:
1)原生的开源库CrashRpt,对多线程支持的不好,且其实现机制(通过HOOK模块导入表中的CreateThread函数)导致其只能捕获在该库之前加载dll模块中的异常,之后加载的dll库发生异常是捕获不到的。
2)改进后的库,提供了对多线程的支持。
3)通过微软开源的Detours技术,彻底解决了CrashRpt很多异常捕获不到的问题,极大地提升了捕获的效率。
4)具体如何使用本异常捕获库,压缩包中提供了一个demo程序,可以参照demo中的做法。 C# 调用C++DLL(函数参数包含指针) C#调用C++DLL,C++DLL中的函数参数包含指针。
绝对可用。 mysql.data.dll 针对mysql数据库驱动版本在VS上引用失败现象,特意给出较多版本的驱动共选择,此处X86版本全面,X64谨慎下载。
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖 与我相关 我的任务 进程/线程/DLL VC/MFC 进程/线程/DLL 复制链接
扫一扫 分享 确定 社区描述 VC/MFC 进程/线程/DLL 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章