WinDbg скрипт анализира псевдоним на двойни кавички

Работя върху скрипт, който изпълнява няколко команди на WinDbg, извежда изхода на някои и анализира други с помощта на .foreach.

Проблемът ми е, че когато се опитам да стартирам:

0: kd> dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT

Резултатът изглежда нещо подобно:

   +0x000 variable1 : 5
   +0x004 variable2 : 0
   +0x008 variable3 : 1
   +0x00c variable4 : 1
   +0x010 variable5 : 8
   +0x014 variable6 : (null)
   +0x018 variable7 : 1
   +0x01c table1 :  ""
    [00] 0 ''
    [01] 0 ''
    [02] 0 ''
    [03] 0 ''

...

Създаване на псевдоним „команда“, която е тази команда, след което се изпълнява:

.foreach(word {command}) { .echo "word" }

ще даде грешката:

Syntax error at .echo """"

Има ли някакъв начин просто да .continue, ако думата е "" ??

Изпълнението на al показва следното:

  Alias            Value  
 -------          -------
 command          dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT
 word             ""

person Ross Aiken    schedule 25.09.2013    source източник
comment
Също така публикувах това тук, тъй като има относително малко хора, които са запознати със скриптовете на WinDbg. Ще се опитам да синхронизирам тези двете. social.msdn.microsoft.com/Forums/en-US/   -  person Ross Aiken    schedule 25.09.2013


Отговори (1)


Опитайте с единични кавички:

.foreach(word {command}) { .echo 'word' }

Мога ли да ви препоръчам да използвате python с windbg? Ще улесни живота ви :)

pykd.codeplex.com

Ако не ти хареса, винаги можеш да го върнеш обратно :).

Например:

DRIVER_DEVICE_CONTEXT = typeInfo( "drivername!DRIVER_DEVICE_CONTEXT" )

for fieldName, fieldType in DRIVER_DEVICE_CONTEXT:
   print fieldName
person pykd team    schedule 26.09.2013
comment
Е, това работи за ехо, но не успява за $spat -- .foreach (word {command}) {.if($spat('','word'){.echo Is}.else{.echo Isnt}} Синтактична грешка при '('','+0x000'){.echo Is}.else{.echo Isnt} Ще трябва да видя за PyKd; работя върху този скрипт за някой друг и не знам колко е разпространен ще бъде внедрен (и ако всички, които използват този скрипт, имат администраторски права за инсталиране на Python/PyKd) - person Ross Aiken; 26.09.2013
comment
Докато WinDbg-роден отговор би бил добър, това е функционална алтернатива. Приема се като най-добър отговор (освен ако някой не измисли роден начин на WinDbg) - person Ross Aiken; 27.09.2013
comment
можете да използвате .catch, за да игнорирате грешки: .foreach(word {command}) { .catch { .if { $spat( pattern, ${word} ) { .echo Found pattern } } } Ще видите съобщения за грешка, но вашите скриптът ще стигне до края - person pykd team; 27.09.2013