сценарии windbg, если еще, если выходные данные совпадают

Я хотел бы установить точку останова в определенной функции, и каждый раз, когда она ломается, я хотел бы искать диапазон памяти для определенной строки. Если эта строка существует, я бы не хотел продолжать. Если да, то продолжайте. Какие-либо предложения? Я думаю, это будет выглядеть примерно так:

.foreach /s line (s -a 0 L?0xfffffff "UNIQUE_STRING") { .if (line =~ "UNIQUE_STRING") { .break } .else { gc } }

Я не слишком хорошо знаком с командой .foreach, поэтому, возможно, я немного ошибся. Моя другая идея была примерно такой:

.if ((.shell -ci "s -a 0 L?0xfffffff \"UNIQUE_STRING\"" findstr "UNIQUE_STRING") != "") {} .else { gc }

Кто-нибудь делал что-то подобное? (извините, некоторые из них являются экстремальным псевдокодом)


person Sir Henry the Great    schedule 05.08.2010    source источник


Ответы (2)


Вы думали о том, чтобы сделать это как расширение вместо этого? IDebugDataSpaces::SearchVirtual возвращает ошибку, если шаблон не найден, что упростит вам задачу.

-Скотт

person snoone    schedule 05.08.2010

Я думаю, что ваш синтаксис команды немного неверен. Пытаться:

bu module!Class::Function ".if (условие) { .echo hit_breakpoint } .else {gc}"

Каждый раз, когда отладчик нажимает Function(), он будет выполнять оператор эха, если условие истинно.

Также поищите «условные точки останова» в .hh (справка Windbg).

person Sanjit Saluja    schedule 11.12.2010