WinDbg:如何知道WinDbg发生了突破?

时间:2010-04-27 10:35:03

标签: debugging windbg

如何自动调试过程?

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

3 个答案:

答案 0 :(得分:2)

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

类似的东西:

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

我相信你应该能够用sx命令做同样的事情,如果你的意思是“在抛出异常的时候”,“当进程中发生中断时”。

答案 1 :(得分: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

答案 2 :(得分:1)

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

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