WinDbg: как узнать, произошел ли разрыв в WinDbg? - PullRequest
4 голосов
/ 27 апреля 2010

Как я могу автоматизировать процесс отладки?

У меня есть сценарий WinDbg с некоторыми основными командами, которые я хочу выполнить, когда break произошел в процессе / приложении, которое я подключил к WinDbg. Как узнать, что в WinDbg есть перерыв, и как автоматически запустить скрипт ?

Ответы [ 3 ]

2 голосов
/ 17 мая 2011

Пример 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" )    

Расширение Python для windbg доступно здесь: pykd.codeplex.com

2 голосов
/ 27 апреля 2010

Вы можете использовать параметр командной строки при установке точки останова для запуска любой команды windbg.Сделайте так, чтобы ваш скрипт запускался.

Что-то вроде:

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

Я считаю, что вы должны быть в состоянии сделать то же самое с командой sx, если вы имеете в виду «когда выдается исключение»«когда произошел перерыв в процессе».

1 голос
/ 28 апреля 2010

Запускаете ли вы приложение с уже подключенным windbg, или вы отлаживаете JIT? Если последнее (то есть, вы полагаетесь на параметр в HKLM \ Softare \ Microsoft \ Windows NT \ AEDebug \ Debugger), то просто измените значение ключа отладчика, чтобы использовать команду "-c" для запуска команды после отладчик присоединяется.

Предполагая первое, вы можете попробовать запустить сервер отладки, используя именованный канал или tcp (с помощью команды .server). Затем вы можете написать консольное приложение для запуска экземпляра cdb в качестве клиента для подключения к вышеупомянутому серверу windbg и иметь приложение для анализа stdout до тех пор, пока не увидите приглашение отладчика. После этого вы сможете эффективно автоматизировать сеанс отладки. Таким образом, процесс синтаксического анализа будет сокращен, возможно, обернут в FSM, в зависимости от того, насколько сложным вы хотите стать.

...