软件调试系列:.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值