IsBadReadPtr|IsBadWritePtr调试崩溃

遇到一未找到必然出现条件的崩溃,不知道什么时候能触发崩溃,崩溃dump显示,试图访问了非法的内存或者写入了非法的内存

此时如下两个函数就比较有用了:

[cpp] view plaincopy

  1. BOOL WINAPI IsBadReadPtr(

  2. __in  const VOID *lp,

  3. __in  UINT_PTR ucb

  4. );
  5. BOOL WINAPI IsBadWritePtr(

  6. __in  LPVOID lp,

  7. __in  UINT_PTR ucb

  8. );

可以用这两个函数在崩溃附近的地方加上判断,附加进程打断点或者记日志,运行程序崩溃的时候会立马断下来,这是就很容易分析崩溃的原因了!

经验:不容易必然重现的崩溃,在分析dump毫无头绪的情况下,思路应该是,1>从dump与日志分析,努力寻找必然崩溃的条件,2,增加必然崩溃的代码,分析dump

时间: 2024-08-03 23:31:48

IsBadReadPtr|IsBadWritePtr调试崩溃的相关文章

vs2010调试崩溃 reflector

最近调试VS2010的程序时,vs2010老是崩溃. 我在google上找了很久,没有找到解决方案.在此记录一下. 崩溃原因:vs2010和reflector不兼容. 前段时间,想看一下C# dll的源代码.所以安装了reflrctor.reflector是什么 找原因的时候,查到了下面的网址:要感谢这位仁兄. 下面是他的解决方案. http://www.cnblogs.com/shaomingrui/archive/2012/03/21/2409764.html 最后发现是reflector在

使用Windows事件查看器调试崩溃

本文讨论如何使用Windows事件查看器获取实际崩溃的模块以及代码中崩溃的位置.示例代码是用C++编写的,以生成不同类型的崩溃,例如访问冲突和堆栈溢出. 简介 我经常听同事和QA那里听说,一个特定的崩溃很容易在客户机上重现,而不是在他们的机器上重现.这是一个棘手的问题,因为开发人员无法在客户机上调试崩溃.最终的结果是支持团队和客户之间无休止的沟通,甚至是现场会议.很少有聪明的程序员自己开发一个崩溃日志系统来确定导致崩溃的代码.很少有人会在代码中全面地实现try-catch块,以缩小问题的范围.

添加友盟调试崩溃问题

Q:在Eclipse里面添加好,通过Android studio的转换,编译没有问题,使用时应用会崩溃,产生异常:java.lang.NoClassDefFoundError: com.umeng.fb.fragment.FeedbackFragment A:参考解决:http://bbs.umeng.com/thread-7127-1-1.html 在Android studio里面添加库依赖:File -> Project Structure -> app -> Dependenci

vs2013调试崩溃,重启电脑依旧崩溃

如果大家遇到 VS断点调试程序崩溃的问题,可以排查是不是有这个问题 VSx新安装了插件 点击工具---扩展和更新  禁用最新安装的程序 一般就没有问题了

17. Debuggers (调试器 5个)

反编译是安全研究的重要组成部分. 它将帮助您解剖Microsoft补丁,以发现他们无法告诉您的默认修复的错误,或更仔细地检查服务器二进制文件以确定为什么您的漏洞利用不起作用. 许多调试器都可用,但IDA Pro已成为分析敌意代码和漏洞研究的事实标准. 这种交互式,可编程,可扩展的多处理反编译器在Windows有图形界面.在Mac OS X上具有控制台界面. OllyDbg是一个用于Microsoft Windows的32位汇编程序级分析调试器. 强调二进制代码分析使得在资源不可用的情况下特别有用

用gdb调试游戏服务端

前言 说说gdb的重要性 一般来说,提到gdb,都是用命令来调试."命令",这个对于用户来说几乎等同于繁杂的词语.尽管事实确实如此,但实际的开发调试必须用到gdb.现在,大多数Linux系统是存在于服务器当中.我们想操作这些系统时,一般是通过Terminal来操作.也就是说这些Linux系统不具有图形界面.而调试一般分两部分,开发时调试和运行时调试.当我们的程序部署到Linux上时,那就需要忘记那该死图形调试器了. 说说写这篇文章的目的 昨天公司游戏的其中服务端崩溃了.我在调试时忘记了

IOS开发中一些受用的编码和调试方法积累

1.## 与 @# 在宏里面该怎样使用 ##的使用, 首先我们添加一个宏 1 #define LRWeakSelf(type) __weak typeof(type) weak##type = type; ##是连接的作用, 即当使用上面的宏会把weak与输入的type值连接起来如下图: #的意思是紧跟着它的后面的标识符添加一个双引号""@#的使用, 我们添加一个普通的宏: 1 #define LRToast(str) [NSString stringWithFormat:@"

使用gdb调试游戏服务器

前言 谈论gdb重要性 一般来说.提gdb,命令用于调试."命令",用户是几乎相同的复杂话.而事实确实如此,实际的开发调试必须用到gdb. 如今.大多数Linux系统是存在于server其中. 我们想操作这些系统时,通常是通过Terminal来操作.也就是说这些Linux系统不具有图形界面.而调试一般分两部分.开发时调试和执行时调试. 当我们的程序部署到Linux上时.那就须要忘记那该死图形调试器了. 说说写这篇文章的目的 昨天公司游戏的当中服务端崩溃了.我在调试时忘记了gdb命令-_

[编译器]dev c++单步调试

一.dev c++调试崩溃的解决方案 1.点击“工具 -> 编译选项”. 2.选择“编译器”选项卡,勾选“编译时加入以下命令”,输入“-g3”. 3.选择“代码生成/优化”选项卡,选择“连接器”选项卡,将“产生调试信息”选为“Yes”. 4.点击确定,重新编译需要调试的程序,就可以单步运行了. 二.单步调试 1.设置断点:在行号附近单击即可,如何调出行号,请转到文末. 2.单击“调试”按钮. 当然也可以在“运行”里找到: 这时界面是这样的: 蓝色的横行左侧带有一个蓝色的箭头,代表当前单步执行的位