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


    场景描述:

    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即可设定断点。

    参考下载:

  • 相关阅读:
    Java面向对象XMind
    使用idea插件JRebel热部署的坑
    Mysql小技巧(多行数据合并+模糊查询
    JRebel安装使用
    Shiro(三) 权限管理 假数据
    Shiro(二)通过shiro实现登录 连接数据库+集成Springboot
    Shiro(一)通过shiro实现登录
    poi实现Excel输出
    日志,注解切入点
    获取用户信息
  • 原文地址:https://www.cnblogs.com/mingle/p/3438025.html
Copyright © 2020-2023  润新知