深入浅出WinDbg——利用快速定位错误

时间:2023-01-01 07:07:27

场景描述:

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

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

解决方案:

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

1 Load SOS(参考文章)

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

操作步骤:

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

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

深入浅出WinDbg——利用快速定位错误

深入浅出WinDbg——利用快速定位错误

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

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

深入浅出WinDbg——利用快速定位错误

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

深入浅出WinDbg——利用快速定位错误

深入浅出WinDbg——利用快速定位错误

其他调试技巧:

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

深入浅出WinDbg——利用快速定位错误

技巧2 定位目标断点代码

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

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

2 bp 000007ff013003f3即可设定断点。

参考下载: