Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Alias är teckensträngar som automatiskt ersätts med andra teckensträngar. Du kan använda dem i felsökningskommandon och undvika att skriva om vissa vanliga fraser.
Ett alias består av ett aliasnamn och ett motsvarande alias. När du använder ett aliasnamn som en del av ett felsökningskommando ersätts namnet automatiskt med aliasmotsvarigheten. Den här ersättningen sker omedelbart innan kommandot parsas eller körs.
Felsökningsprogrammet stöder tre typer av alias:
Du kan ange och namnge användardefinierade alias.
Du kan ange alias med fast namn, men de heter $u 0, $u 1, ..., $u 9.
Felsökningsprogrammet anger och namnger automatiska alias.
Definiera ett User-Named alias
När du definierar ett användarnamnsalias kan du välja aliasnamnet och aliasets motsvarighet:
Aliasnamnet kan vara valfri sträng som inte innehåller tomt utrymme.
Aliasekvivalenten kan vara valfri sträng. Om du anger den på tangentbordet får aliaset inte innehålla inledande mellanslag eller vagnreturer. Du kan också ange den som en sträng i minnet, värdet för ett numeriskt uttryck, innehållet i en fil, värdet för en miljövariabel eller utdata från ett eller flera felsökningskommandon.
Både aliasnamnet och aliasmotsvarigheten är skiftlägeskänsliga.
Om du vill definiera eller omdefiniera ett användarnamnsalias använder du kommandot som (Ange alias) eller aS (Ange alias).
Om du vill ta bort ett alias använder du kommandot ad (Delete Alias).
Om du vill visa en lista över alla aktuella användarnamnsalias använder du kommandot al (listalias).
Definiera ett Fixed-Name alias
Det finns 10 alias med fast namn. Deras aliasnamn är $u 0, $u 1, ..., $u 9. Deras aliasekvivalenter kan vara valfri sträng som inte innehåller tangenttryckningen RETUR.
Använd kommandot r (Register) för att definiera aliasekvivalenter för alias med fast namn. När du definierar ett alias med fast namn måste du infoga en punkt (.) före bokstaven "u". Texten efter likhetstecknet (=) är aliasmotsvarigheten. Aliasmotsvarigheten kan innehålla blanksteg eller semikolon, men inledande och avslutande blanksteg ignoreras. Du bör inte omsluta aliasmotsvarigheten inom citattecken (om du inte vill ha citattecken i resultatet).
Observera Bli inte förvirrad genom att använda kommandot r (Register) för alias med fast namn. Dessa alias är inte register eller pseudoregister, även om du använder r-kommandot för att ange deras aliasekvivalenter. Du behöver inte lägga till ett vid (@) tecken före dessa alias, och du kan inte använda r-kommandot för att visa värdet för ett av dessa alias.
Om du inte definierar ett alias med fast namn är det som standard en tom sträng.
Automatiska alias
Felsökningsprogrammet anger följande automatiska alias.
| Aliasnamn | Aliasmotsvarighet |
|---|---|
$ntnsym |
Den lämpligaste modulen för NT-symboler i datorns inbyggda arkitektur. Det här aliaset kan vara lika med antingen ntdll eller nt. |
$ntwsym |
Den lämpligaste modulen för NT-symboler under 32-bitars felsökning som använder WOW64. Det här aliaset kan vara ntdll32 eller någon annan 32-bitarsversion av Ntdll.dll. |
$ntsym |
Den lämpligaste modulen för NT-symboler som matchar det aktuella datorläget. När du felsöker i inbyggt läge är det här aliaset detsamma som $ntnsym. När du felsöker i ett icke-inbyggt läge försöker felsökaren hitta en modul som matchar det här läget. (Till exempel under 32-bitars felsökning som använder WOW64 är det här aliaset detsamma som $ntwsym.) |
$CurrentDumpFile |
Namnet på den senaste dumpfilen som felsökningsprogrammet läste in. |
$CurrentDumpPath |
Katalogsökvägen för den senaste dumpfilen som felsökningsprogrammet läste in. |
$CurrentDumpArchiveFile |
Namnet på den senaste dumparkivfilen (CAB-filen) som felsökningsprogrammet läste in. |
$CurrentDumpArchivePath |
Katalogsökvägen för den senaste dumparkivfilen (CAB-fil) som felsökningsprogrammet läste in. |
Automatiska alias liknar automatiska pseudoregister, förutom att du kan använda automatiska alias med aliasrelaterade token (till exempel ${ }), medan du inte kan använda pseudoregister med dessa token.
Använda ett alias i felsökningskommandofönstret
När du har definierat ett alias kan du använda det i valfri kommandopost. Aliasnamnet ersätts automatiskt med aliasmotsvarigheten. Därför kan du använda aliaset som ett uttryck eller som ett makro.
Ett aliasnamn expanderas korrekt även om det omges av citattecken. Eftersom aliasekvivalenten kan innehålla valfritt antal citattecken eller semikolon kan aliasmotsvarigheten representera flera kommandon.
Ett användarnamnsalias identifieras endast om namnet avgränsas från andra tecken med blanksteg. Det första tecknet i aliasnamnet måste börja raden eller följa ett blanksteg, ett semikolon eller ett citattecken. Det sista tecknet i aliasnamnet måste avsluta raden eller följas av ett blanksteg, ett semikolon eller ett citattecken.
Notera All text som du anger i felsökningskommandofönstret som börjar med "as", "aS", "ad" eller "al" genomgår inte aliasersättning. Den här begränsningen förhindrar att aliaskommandona återges som obrukbara. Den här begränsningen innebär dock också att kommandon som följer ad eller al på en rad inte får sina alias ersatta. Om du vill att alias ska ersättas på en rad som börjar med en av dessa strängar lägger du till ett semikolon före aliaset.
Du kan dock använda token ${ } för att expandera ett användarnamnsalias även när det finns bredvid annan text. Du kan också använda den här token tillsammans med vissa växlar för att förhindra att ett alias expanderas eller för att visa vissa aliasrelaterade värden. Mer information om dessa situationer finns i ${ } (Alias Interpreter).
Ett alias med fast namn expanderas korrekt från valfri punkt inom en rad, oavsett hur det bäddas in i texten på raden.
Du kan inte använda kommandon som endast är tillgängliga i WinDbg (.open, .write_cmd_hist (Skriv kommandohistorik), .lsrcpath och .lsrcfix) och några ytterligare kommandon (.hh, .cls, .wtitle, .remote, kernel-mode .restart och user-mode .restart) med alias.
Använda ett alias i en skriptfil
När du använder ett alias i en skriptfil måste du vara särskilt noga med att se till att aliaset expanderas vid rätt tidpunkt. Överväg följande skript:
.foreach (value {dd 610000 L4})
{
as /x ${/v:myAlias} value + 1
.echo value myAlias
}
ad myAlias
Första gången genom loopen tilldelar kommandot as, aS (Set Alias) ett värde till myAlias. Värdet som tilldelats myAlias är 1 plus 610000 (det första utdata från dd-kommandot). Men när kommandot .echo (Echo Comment) körs har myAlias ännu inte expanderats, så i stället för att se 610001 ser vi texten "myAlias".
0:001> $$>< c:\Script02.txt
00610000 myAlias
00905a4d 0x610001
00000003 0x905a4e
00000004 0x4
0000ffff 0x5
Problemet är att myAlias inte expanderas förrän ett nytt kodblock har angetts. Nästa post i loopen är ett nytt block, så myAlias expanderas till 610001. Men det är för sent: vi borde ha sett 610001 första gången genom slingan, inte andra gången. Vi kan åtgärda det här problemet genom att omsluta kommandot .echo (Echo Comment) i ett nytt block enligt följande skript.
.foreach (value {dd 610000 L4})
{
as /x ${/v:myAlias} value + 1
.block{.echo value myAlias}
}
ad myAlias
Med det ändrade skriptet får vi följande korrekta utdata.
0:001> $$>< c:\Script01.txt
00610000 0x610001
00905a4d 0x905a4e
00000003 0x4
00000004 0x5
0000ffff 0x10000
Mer information finns i .block och ${ } (Alias Interpreter).
Använda en .foreach-token i ett alias
När du använder en .foreach-token i definitionen av ett alias måste du vara särskilt noga med att se till att token expanderas. Överväg följande sekvens med kommandon.
r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {as myAlias Token}
al
Det första kommandot anger värdet för pseudoregistret $t 0 till 5. Det andra kommandot tar bort alla värden som tidigare har tilldelats myAlias. Det tredje kommandot tar den tredje token för kommandot ?@$t 0 och försöker tilldela värdet för denna token till myAlias. Det fjärde kommandot visar alla alias och deras värden. Vi förväntar oss att värdet för myAlias är 5, men i stället är värdet ordet "Token".
Alias Value
------- -------
myAlias Token
Problemet är att as-kommandot är i början av raden i brödtexten i .foreach-loopen . När en rad börjar med ett som-kommando expanderas inte alias och tokens på den raden. Om vi placerar ett semikolon eller tomt utrymme före som-kommandot expanderas alla alias eller token som redan har ett värde. I det här exemplet expanderas inte myAlias eftersom det inte redan har något värde. Token expanderas eftersom den har värdet 5. Här är samma sekvens av kommandon med tillägg av ett semikolon före kommandot as.
r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {;as myAlias Token}
al
Nu får vi förväntat resultat.
Alias Value
------- -------
myAlias 5
Rekursiva aliasnamn
Du kan använda ett alias med fast namn i definitionen av ett alias. Du kan också använda ett användarnamnsalias i definitionen av ett alias med fast namn. Men om du vill använda ett användarnamnsalias i definitionen av ett annat användarnamn måste du lägga till ett semikolon före as- elleraS-kommandot , annars sker inte aliasbytet på den raden.
När du använder rekursiva definitioner av den här typen översätts varje alias så snart det används. I följande exempel visas till exempel 3, inte 7.
0:000> r $.u2=2
0:000> r $.u1=1+$u2
0:000> r $.u2=6
0:000> ? $u1
Evaluate expression: 3 = 00000003
På samma sätt visas 3 i följande exempel, inte 7.
0:000> as fred 2
0:000> r $.u1= 1 + fred
0:000> as fred 6
0:000> ? $u1
Evaluate expression: 3 = 00000003
Följande exempel är också tillåtet och visar 9.
0:000> r $.u0=2
0:000> r $.u0=7+$u0
0:000> ? $u0
Evaluate expression: 9 = 00000009
Aliasexempel
Du kan använda alias så att du inte behöver skriva långa eller komplexa symbolnamn, som i följande exempel.
0:000> as Short usersrv!NameTooLongToWantToType
0:000> dw Short +8
Följande exempel liknar föregående exempel men använder ett alias med fast namn.
0:000> r $.u0=usersrv!NameTooLongToWantToType
0:000> dw $u0+8
Du kan använda alias som makron för kommandon som du använder ofta. I följande exempel ökas eax- och ebx-registren två gånger.
0:000> as GoUp r eax=eax+1; r ebx=ebx+1
0:000> GoUp
0:000> GoUp
I följande exempel används ett alias för att förenkla skrivningen av kommandon.
0:000> as Cmd "dd esp 14; g"
0:000> bp MyApi Cmd
Följande exempel liknar föregående exempel men använder ett alias med fast namn.
0:000> r $.u5="dd esp 14; g"
0:000> bp MyApi $u5
Båda ovanstående exempel motsvarar följande kommando.
0:000> bp MyApi "dd esp 14; g"
Tools.ini-fil
I CDB (och NTSD) kan du fördefiniera alias med fastställt namn i tools.ini-filen . Om du vill fördefiniera ett alias med fast namn lägger du till de $u fält som du vill använda i posten [NTSD], som i följande exempel.
[NTSD]
$u1:_ntdll!_RtlRaiseException
$u2:"dd esp 14;g"
$u9:$u1 + 42
Du kan inte ange användarnamnsalias i Tools.ini-filen.
Fixed-Name alias jämfört med User-Named alias
Användarnamnsalias är enklare att använda än alias med fast namn. Deras definitionssyntax är enklare och du kan lista dem med hjälp av kommandot al (listalias).
Alias med fast namn ersätts om de används bredvid annan text. Om du vill att ett användarnamnsalias ska ersättas när det är bredvid annan text omger du det i token ${ } (aliastolkare).
Ersättning av alias med fast namn sker före ersättning av alias namngivet av användaren.