场景描述:

Sharepoint代码的某方法LoadLines()中使用了SPSecurity.RunWithElevatedPrivileges(delegate()

此方法两次调用了Common.GetLookupValue,并且问题可能出在这里。

解决方案:

由于开发环境没有VS2008,所以我们使用WinDbg进行调试。针对这种情况有两种方式:

1 Load SOS(参考文章)

2 通过快速捕捉异常的方式来快速定位错误(!u eip)

操作步骤:

1 打开WinDbg,附加对应的w3wp.exe进程。

2 刷新出错页面,运行命令!u eip 以反汇编的方式来查看内存

3 通过搜索>>>快速定位出错点,然后分析出错的上下文,定位可能的出错语句位置:

000007ff`013003f3 e8c8ddffff      call    000007ff`012fe1c0 (ConcurrenceAutomation.Common.GetLookupValue(System.Object), mdToken: 060000d0)

4 运行命令r,查看寄存器(rax)指针引用的值为空引起的(byte ptr [rax],0)

其他调试技巧:

技巧1 每次启动调试加载dll,如何清理?使用命令sxd ld清理。

技巧2 定位目标断点代码

1 查看!u eip的结果,搜索关键字Common.GetLookupValue

000007ff`013003f3 e8c8ddffff      call    000007ff`012fe1c0 (ConcurrenceAutomation.Common.GetLookupValue(System.Object), mdToken: 060000d0)

2 bp 000007ff013003f3即可设定断点。

参考下载:

深入浅出WinDbg——利用快速定位错误的更多相关文章

  1. IDEA快速定位错误快捷键

  2. 如何利用快照( snapshot )功能快速定位性能问题

    我们常常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,但是测试人员搭建环境后又没办法复现故障,最后导致问题没法解决,眼睁睁地看着用户流失. 这是因为线上生产环境非常复杂.很多时候是偶发性  ...

  3. Doris开发手记3:利用CoreDump文件快速定位Doris的查询问题

    Apache Doris的BE部分是由C++编写,当出现一些内存越界,非法访问的问题时会导致BE进程的Crash.这部分的问题常常较难排查,同时也很难快速定位到对应的触发SQL,给使用者带来较大的困扰 ...

  4. 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)

    32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议 ...

  5. 使用MAP文件快速定位程序崩溃代码行 (转)

    使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...

  6. postgresql异常快速定位

    今天下午在使用.NET链接postgresql的时候报了“3D000”的错误,经过测试得知原来是web.config中的数据库配置问题. 在这里有个小情况需要注意,postgresql是不允许创建相同 ...

  7. 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.

    32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...

  8. 快速定位 Android APP 当前页面的三种方法(Activity / Fragment)

    方法一.通过adb命令打印当前页面: Android 如何快速定位当前页面是哪个Activity or Fragment (1)查看当前Activity :adb shell "dumpsy ...

  9. 可以搜索到DedeCms后台文章列表文档id吗?或者快速定位id编辑文章

    我们在建站时有的时候发现之前的文章有错误了,要进行修改,但又不知道文章名,只知道大概的文章id,那么可以搜索到DedeCms后台文章列表文档id吗?或者快速定位文章id方便修改? 第一种方法:复制下面 ...

随机推荐

  1. Mysql5.7 半同步改进

    Mysql5.6半同步策略 Mysql 5.6在半同步的时候,采用的是After Commit策略.即在主库上commit了之后,等待从库返回确认. 在这里,首先会出现幻读的问题,即当前连接的事务读取 ...

  2. Spring中线程池的应用

    多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...

  3. jquery中 dom对象与jQuery对象相互转换

    var jq = $(dom对象);//额 再补充点吧好记. $是jquery的别名.这一句等价于 var jq = jQuery(dom对象); 反之. dom对象 = jq[0]; //不写那么长 ...

  4. Grid控件

    Grid控件是WPF布局容器中功能最强大.最灵活的控件.Grid控件基本上能够完成其他WPF容器控件所能完成的功能,Microsoft建议大多数界面的布局都使用Grid控件来实现,因此默认情况下.vs ...

  5. <a>标签中href="javascript:;"的意思

    <a> 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段. 这里的href=&q ...

  6. 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了

    一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...

  7. DOM基础操作(三)

    DOM剩余的两个操作一并带来! 1.删除操作 removeChild 这个方法依然是父级调用的,参数就是要删除的子节点,其实实际上是剪切,这个方法会把我们删除掉的元素给返回,我们可以用一个变量去保存这 ...

  8. C# Timer定时器用法

    System.Timers.Timer timer1 = new System.Timers.Timer(); timer1.Elapsed += new System.Timers.ElapsedE ...

  9. JavaScript如何比较两个数组的内容是否相同【转】

    比较2个数组是否相等的.  不能像字符样 简单的用  ==   === 比较 ([]==[]); // false ([]===[]); // false 都是false -------------- ...

  10. CSS3 教程

    CSS3 教程 CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. 本教程向您讲解 CSS3 中的新特性. 开始学习 CSS3!  更多:http://www.runoob.com ...