博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net 高级调试学习(1)加载sos,设置断点
阅读量:5884 次
发布时间:2019-06-19

本文共 2376 字,大约阅读时间需要 7 分钟。

1、在windbg的File\Open 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:\book and sources\adndsrc\Chapter3\Breakpoint\03Breakpoint.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:\book and sources\adndsrc\Chapter3\Breakpoint\03Breakpoint.cs @ 16]

PARAMETERS:
args (0x00000000001cefa0) = 0x0000000002053488
LOCALS:
0x00000000001cef48 = 0x0000000002056c40

00000000001cf1d0 000007feee254073 [GCFrame: 00000000001cf1d0]

 

转载于:https://www.cnblogs.com/karl-F/p/debug.html

你可能感兴趣的文章
linux c下输入密码不回显
查看>>
【C语言】练习1-23
查看>>
在Linux命令行下发送html格式的邮件
查看>>
说说PHP中foreach引用的一个坑
查看>>
基于express框架的应用程序骨架生成器介绍
查看>>
Spring学习11-Spring使用proxool连接池 管理数据源
查看>>
2016第6周五
查看>>
ASP.NET 免费开源控件
查看>>
面向对象葵花宝典阅读思维导图(二)
查看>>
volatile关键字与线程间通信
查看>>
优秀大数据GitHub项目一览
查看>>
TCP/IP详解学习笔记(8)-DNS域名系统
查看>>
通过维基API实现维基百科查询功能
查看>>
bootstrap 2
查看>>
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
win 下 apache 虚拟主机配置方式
查看>>
第十一篇:基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
查看>>