zoukankan      html  css  js  c++  java
  • .net 高级调试学习(1)加载sos,设置断点

    1、在windbg的FileOpen Executable 载入执行程序,调试器会自动注入一个中断指令,使用户可以有机会与调试目标进行交互

    2、输入命令 g 可以继续执行,加载模块

    3、可以点击手动windb的中断按钮进行中断

    4、加载sos模块,如果调试的是

    .net 2.0 程序可以 通过命令 .loadby sos mscorwks  加载,

    dotnet 4 可以通过命令.loadby sos clr 或 .loadby sos clrjit

    ps : 可以使用sxe ld mscorwks.dll  使进程加载mscorwks模块是中断,然后再执行.loadby sos mscorwks 加载sos

    5、通过 !name2ee 将给定的类名称转换为 MethodTable 或 EEClass 的地址

    格式: !Name2EE <module name> <type or method name>

    如  !name2ee  03breakpoint.exe  Advanced.NET.Debuggin.Chapter3.Breakpoint.AddAndPrint 

    如何方法已经被jit编译则可看到如下:

    Module: 000007fe8ead40c0
    Assembly: 03Breakpoint.exe
    0:004> !name2ee 03Breakpoint.exe Advanced.NET.Debuggin.Chapter3.Breakpoint.AddAndPrint
    Module: 000007fe8ead40c0
    Assembly: 03Breakpoint.exe
    0:004> !name2ee 03Breakpoint.exe Advanced.NET.Debugging.Chapter3.Breakpoint.AddAndPrint
    Module: 000007fe8ead40c0
    Assembly: 03Breakpoint.exe
    Token: 0000000006000002
    MethodDesc: 000007fe8ead5998
    Name: Advanced.NET.Debugging.Chapter3.Breakpoint.AddAndPrint(Int32, Int32)
    JITTED Code Address: 000007fe8ebe0600

    通过输入bp   000007fe8ebe0600 设置断点

    如果没被jit编译则显示如下:

    Module: 000007fe8eaf40c0
    Assembly: 03Breakpoint.exe
    Token: 0000000006000002
    MethodDesc: 000007fe8eaf5998
    Name: Advanced.NET.Debugging.Chapter3.Breakpoint.AddAndPrint(Int32, Int32)
    Not JITTED yet. Use !bpmd -md 000007fe8eaf5998 to break on run.

    此时可以通过  !bpmd -md 000007fe8eaf5998 设置断点

    PS:中断后可以通过 :

     执行 u, 程序将反汇编接下来将执行的命令

    执行 p, 程序将单步运行

    执行 pc, 程序将执行到下一个call语句处。

    执行 t,程序将进入子函数

    6、继续执行查看调用栈输入命令 !clrstack -a  

    需要切换当前查看的主线程,命令 ~0s,因为手动中断了,会不在主线程上

    显示如下:

    0:000> !clrstack -a
    OS Thread Id: 0x1ef0 (0)
    Child SP IP Call Site
    00000000001cee90 000007fe8ec0063e *** WARNING: Unable to verify checksum for 03Breakpoint.exe
    Advanced.NET.Debugging.Chapter3.Breakpoint.AddAndPrint(Int32, Int32) [F:ook and sourcesadndsrcChapter3Breakpoint3Breakpoint.cs @ 36]
    PARAMETERS:
    this (0x00000000001cef10) = 0x0000000002056c40
    a (0x00000000001cef18) = 0x000000000000000a
    b (0x00000000001cef20) = 0x0000000000000005
    LOCALS:
    0x00000000001ceeec = 0x0000000000000000

    00000000001cef10 000007fe8ec0050d Advanced.NET.Debugging.Chapter3.Breakpoint.Main(System.String[]) [F:ook and sourcesadndsrcChapter3Breakpoint3Breakpoint.cs @ 16]
    PARAMETERS:
    args (0x00000000001cefa0) = 0x0000000002053488
    LOCALS:
    0x00000000001cef48 = 0x0000000002056c40

    00000000001cf1d0 000007feee254073 [GCFrame: 00000000001cf1d0]

  • 相关阅读:
    Nested Loops(嵌套循环)
    sql语句解析顺序和执行顺序
    log4j2常见配置
    log4j常见配置
    logback常见配置
    cannot change version of project facet Dynamic web module to 2.5
    oracle按照in的顺序进行排序
    win7下PLSQL Developer提示“ORA-12154: TNS:无法解析指定的连接标识符”
    前端PHP入门-005-爱情是常量还是变量
    前端PHP入门-006-表达式和运算符
  • 原文地址:https://www.cnblogs.com/karl-F/p/debug.html
Copyright © 2011-2022 走看看