zoukankan      html  css  js  c++  java
  • 软件调试系列:.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
  • 相关阅读:
    行为模式-模板方法
    行为模式-策略模式
    行为模式-观察者 模式
    行为模式-责任链模式
    python-json
    mongo资料
    用with管理lock锁
    枚举类使用
    db2常见操作命令
    trancate immediate reuse storage
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3067459.html
Copyright © 2011-2022 走看看