【问题标题】:WinDbg: how to know a break happened in WinDbg?WinDbg:如何知道 WinDbg 发生了中断?
【发布时间】:2010-04-27 10:35:02
【问题描述】:

如何自动化调试过程?

我有一个带有一些基本命令的 WinDbg 脚本,当我附加到 WinDbg 的进程/应用程序中发生中断 时,我想运行这些命令。 如何知道WinDbg有中断,如何自动启动脚本

【问题讨论】:

    标签: debugging windbg


    【解决方案1】:

    您可以在设置断点时使用命令字符串选项来运行任何 windbg 命令。让它运行你的脚本。

    类似:

    bp  <address to set break> "$$><c:\\temp\\dbgscript.txt;g"
    

    如果您的意思是“抛出异常时”和“进程中发生中断时”,我相信您应该能够使用 sx 命令执行相同的操作。

    【讨论】:

      【解决方案2】:

      Python 示例:

      from pykd import *
      
      def bpCallback():
      
          if is64bitSystem():
              objAttr = typedVar( "ntdll", "_OBJECT_ATTRIBUTES", reg("r8") ) 
          else:
              objAttr = typedVar( "ntdll", "_OBJECT_ATTRIBUTES", ptrPtr(reg("esp") + 0xC) )  
      
          name = loadUnicodeString( objAttr.ObjectName )
      
          dprintln( "NtCreateFile: " + name )
      
          return DEBUG_STATUS_GO_HANDLED
      
      
      if not isWindbgExt():
          startProcess("notepad.exe")
      
      
      if not isDumpAnalyzing() and not isKernelDebugging():
          
          nt = loadModule("ntdll")
      
          b1 = bp( nt.NtCreateFile, bpCallback )
      
          # wait for user break, exceptions or process exit
          go()
      
          dprintln( "stopped" )    
      
      else:
      
          dprintln( "The debugger must be connected to live usermode process" )    
      

      windbg 的 Python 扩展可在此处获得: pykd.codeplex.com

      【讨论】:

      • 我得到这个“NameError: global name 'bp' is not defined”..知道为什么吗?
      【解决方案3】:

      您是在运行已附加windbg 的应用程序,还是在进行JIT 调试?如果是后者(即,您依赖于 HKLM\Softare\Microsoft\Windows NT\AEDebug\Debugger 中的设置),则只需修改 Debugger 键的值以使用“-c”命令在之后运行命令调试器附加。

      假设是前者,那么您可以尝试使用命名管道或 tcp(使用 .server 命令)启动调试服务器。然后,您可以编写一个控制台应用程序来启动一个 cdb 实例作为客户端连接到上述的 windbg 服务器并让应用程序解析标准输出,直到您看到调试器提示。然后,您可以从那时起有效地自动化调试会话。因此,它减少了解析练习,可能包含在 FSM 中,具体取决于您想要获得的复杂程度。

      【讨论】:

      • 感谢您的意见。正如你猜到的,这是我想要实现的第一个场景。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多