软件调试系列:.Net应用程序调试之设置断点

 

.Net应用程序调试之设置断点

在软件调试过程中,断点功能至关重要,想像一下,如果没有断点功能,那么当我们需要查看特定函数的执行情况时,该是多么的困难。

.Net应用程序虽然是在执行过程中将中间代码编译成本地代码,也就是说如果中间代码未被编译成本地代码之前,我们无法用bp 命令来设置断点,而我们又很难知道中间代码何时被编译成本地代码,看似是一个很困难的任务,但所幸Windbg.exe 的插件SOS.dll SOSex.dll提供了一些有用的扩展命令来帮助我们完成该任务。

先来看SOS.dll提供的BPMD 命令的应用

!BPMD命令格式如下所示:

0:004> !help bpmd

-------------------------------------------------------------------------------

!BPMD [-nofuturemodule] <module name> <method name>

!BPMD -md <MethodDesc>

!BPMD -list

!BPMD -clear <pending breakpoint number>

!BPMD -clearall

 

从以上可知BPMD支持通过函数名或函数地址来设置断言

其中值得注意有以下2点:

1:若通过!BPMD [-nofuturemodule] <module name> <method name> 来设置断点,则需要在<method name> 包含命名空间,如下例所示

!BPMD ConsoleApplication TEST.CTest.Hello

其中TEST为命名空间

2:若断点设置的函数若未被编译成本地代码,BPMD 将会在收到该断点函数被编译成本地代码时设置断点,同时如果要设置断点的函数所在的模块未被加载,则应该加上-nofuturemodule选项以通知BPDM 模块可能没有被加载

另外sosex.dll里提供了一个特别有用的断点设置函数,可以通过指定源代码行号来设置断点,命令格式为:

 !sosex.mbp <source file> <line number> [column number> [Options] "command" 

其中各字段功能如下所示:

1source file 源代码名

2line number 行号

3column number 列号

4: Options 可选参数:

/1 设置一次断点

/p:n 在跳过n次后设置断点  /p:3表示在第3次执行到该处代码时设置断点

5/t:n :在指定的线程断点

6"command"  断点触发时所执行的命令

 

 

 

 


cuiweican
posted @ 2013-05-08 19:22  javawebsoa  Views(287)  Comments(0)    收藏  举报