Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az aliasok olyan karaktersztringek, amelyek automatikusan más karaktersztringekre cserélődnek. Használhatja őket hibakereső parancsokban, és elkerülheti bizonyos gyakori kifejezések újraformázását.
Az alias egy aliasnévből és egy egyenértékű aliasból áll. Ha egy hibakereső parancs részeként aliasnevet használ, a rendszer automatikusan lecseréli a nevet az alias-megfelelőre. Ez a csere azonnal megtörténik a parancs elemzése vagy végrehajtása előtt.
A hibakereső háromféle aliast támogat:
Beállíthatja és elnevezheti a felhasználó által elnevezett aliasokat.
Beállíthatja a rögzített név aliasokat, de ezek neve $u 0, $u 1, ..., $u 9.
A hibakereső automatikus aliasokat állít be és nevez el.
User-Named Alias definiálása
Felhasználó által elnevezett alias definiálásakor kiválaszthatja az alias nevét és az azzal egyenértékű aliast:
Az aliasnév bármely olyan szöveg lehet, amely nem tartalmaz szóközt.
Az alias megfelelője bármilyen sztring lehet. Ha a billentyűzeten adja meg, az alias megfelelője nem tartalmazhat kezdő szóközöket vagy kocsivisszaírásokat. Alternatív megoldásként beállíthatja a következőre: egy memóriában lévő karakterlánc, egy numerikus kifejezés értéke, egy fájl tartalma, egy környezeti változó értéke, vagy egy vagy több hibakereső parancs kimenete.
Az aliasnév és az alias megfelelője esetében egyaránt megkülönböztetjük a kis- és nagybetűket.
Felhasználó által elnevezett alias definiálásához vagy újbóli definiálásához használja az As (Alias beállítása) vagy az aS (Alias beállítása) parancsot.
Alias eltávolításához használja a hirdetés (Alias törlése) parancsot.
Az összes jelenlegi felhasználó által elnevezett alias listázásához használja az al (List Aliases) parancsot.
Fixed-Name Alias definiálása
10 rögzített nevű alias létezik. Aliasnevük $u 0, $u 1, ..., $u 9. Az alias megfelelői lehetnek olyan sztringek, amelyek nem tartalmazzák az ENTER billentyűleütést.
Az r (Registers) paranccsal definiálhatja a rögzített névű aliasok alias-megfelelőit. A rögzített név aliasának megadásakor be kell szúrnia egy pontot (.) az "u" betű elé. Az egyenlőségjel (=) utáni szöveg az alias megfelelője. Az alias megfelelője tartalmazhat szóközöket vagy pontosvesszőket, de a kezdő és záró szóközök figyelmen kívül lesznek hagyva. Az alias-megfelelőt nem szabad idézőjelek közé foglalni (kivéve, ha idézőjeleket szeretne az eredményekben).
Megjegyzés Ne keverje össze a rögzített nevű aliasokat az r (Registers) parancssal. Ezek az aliasok nem regiszterek vagy pszeudoregiszterek, annak ellenére, hogy az r paranccsal állítja be az aliasoknak a megfelelőit. Ezen aliasok előtt nem kell at (@) előjelet hozzáadnia, és az r paranccsal nem jelenítheti meg ezen aliasok egyikének értékét.
Alapértelmezés szerint, ha nem határoz meg egy fix nevű alias-t, az egy üres karakterlánc.
Automatikus aliasok
A hibakereső az alábbi automatikus aliasokat állítja be.
| Álnév | Alias megfelelője |
|---|---|
$ntnsym |
A számítógép natív architektúráján található NT-szimbólumok legmegfelelőbb modulja. Ez az alias ntdll vagy nt lehet. |
$ntwsym |
A 32 bites hibakereséshez a legmegfelelőbb modul, amely WOW64-et használ NT szimbólumok esetén. Ez az alias lehet ntdll32 vagy a Ntdll.dllegyéb 32 bites verziója. |
$ntsym |
Az aktuális gépi módnak megfelelő NT-szimbólumok legmegfelelőbb modulja. Ha natív módban hibaelemzést végez, ez az alias ugyanaz, mint a $ntnsym. Ha nem natív módban keres hibakeresést, a hibakereső megpróbál megkeresni egy olyan modult, amely megfelel ennek a módnak. (Például a WOW64-et használó 32 bites hibakeresés során ez az alias megegyezik a $ntwsym -el.) |
$CurrentDumpFile |
A hibakereső által betöltött utolsó memóriaképfájl neve. |
$CurrentDumpPath |
Az utolsó, a hibakereső által betöltött memóriaképfájl könyvtárának elérési útja. |
$CurrentDumpArchiveFile |
A hibakereső által betöltött utolsó memóriaképarchívumfájl (CAB-fájl) neve. |
$CurrentDumpArchivePath |
A hibakereső által betöltött utolsó dömp fájl (CAB-fájl) könyvtárának elérési útja. |
Az automatikus aliasok hasonlóak az automatikus pszeudoregisztrációs regiszterekhez, azzal a kivétellel, hogy az automatikus aliasokat aliashoz kapcsolódó jogkivonatokkal (például ${ }) használhatja, míg a pszeudoregisztrációs regiszterek nem használhatók ezekkel a jogkivonatokkal.
Alias használata a Hibakereső parancsablakban
Miután definiált egy aliast, bármely parancsbejegyzésben használhatja. Az alias neve automatikusan az alias megfelelőjére cserélődik. Ezért használhatja az aliast kifejezésként vagy makróként.
Az aliasnév akkor is megfelelően bővül, ha idézőjelek közé van állítva. Mivel az alias megfelelője tetszőleges számú idézőjelet vagy pontosvesszőt tartalmazhat, az alias megfelelője több parancsot is jelölhet.
A felhasználó által elnevezett aliasok csak akkor lesznek felismerve, ha a nevét szóköz választja el a többi karaktertől. Az aliasnév első karakterének el kell kezdenie a sort, vagy szóközt, pontosvesszőt vagy idézőjelet kell követnie. Az aliasnév utolsó karakterének véget kell vetnie a sornak, vagy szóközt, pontosvesszőt vagy idézőjelet kell követnie.
Jegyzet A Hibakereső parancs ablakába beírt, "as", "aS", "ad" vagy "al" szöveggel kezdődő szövegek nem kapják meg az alias cseréjét. Ez a korlátozás megakadályozza, hogy az aliasparancsok működésképtelenek legyenek. Ez a korlátozás azonban azt is jelenti, hogy az ad vagy al utáni soron lévő parancsoknál nem történik az aliasok helyettesítése. Ha egy ilyen sztringgel kezdődő sorban szeretné lecserélni az aliasokat, tegyen egy pontosvesszőt az alias elé.
A ${ } token segítségével azonban még akkor is kibonthat egy felhasználó által elnevezett aliast, ha az egyéb szöveg mellett található. Ezt a tokent bizonyos kapcsolókkal együtt is használhatja, hogy megakadályozza az alias kibővítését vagy bizonyos aliashoz kapcsolódó értékek megjelenítését. Ezekről a helyzetekről további információt a ${ } (Alias Értelmező) című témakörben talál.
A rögzített név aliasa a sor bármely pontjáról megfelelően bővül, függetlenül attól, hogy hogyan van beágyazva a sor szövegébe.
Nem használhat olyan parancsokat, amelyek csak a WinDbg (.open, .write_cmd_hist (Parancselőzmények írása), .lsrcpath és .lsrcfix) és néhány további parancs (.hh, .cls, .wtitle, .remote, kernel-módú .restart és felhasználói módú .restart) esetében állnak rendelkezésre az aliasokkal.
Alias használata szkriptfájlban
Amikor aliast használ egy szkriptfájlban, különös figyelmet kell fordítania arra, hogy az alias a megfelelő időpontban legyen kibontva. Fontolja meg a következő szkriptet:
.foreach (value {dd 610000 L4})
{
as /x ${/v:myAlias} value + 1
.echo value myAlias
}
ad myAlias
A ciklus első végrehajtásakor az aS (Alias beállítása) parancs hozzárendel egy értéket a myAliashoz. A myAliashoz rendelt érték 1 plusz 610000 (a dd parancs első kimenete). A .echo (Echo Comment) parancs végrehajtásakor azonban a myAlias még nem lett kibontva, így ahelyett, hogy 610001 látnánk, a "myAlias" szöveget látjuk.
0:001> $$>< c:\Script02.txt
00610000 myAlias
00905a4d 0x610001
00000003 0x905a4e
00000004 0x4
0000ffff 0x5
A probléma az, hogy a myAlias nem kerül kibontásra, amíg egy új kódblokk nem lép érvénybe. A hurok következő bejegyzése egy új blokk, így a myAlias kibővül 610001-re. De már túl késő: először 610001 kellett volna látnunk a hurokon keresztül, nem pedig a második alkalommal. Ezt a problémát az .echo (Echo Comment) parancs egy új blokkba való belefoglalásával oldhatjuk meg, ahogyan az az alábbi szkriptben is látható.
.foreach (value {dd 610000 L4})
{
as /x ${/v:myAlias} value + 1
.block{.echo value myAlias}
}
ad myAlias
A módosított szkripttel a következő helyes kimenetet kapjuk.
0:001> $$>< c:\Script01.txt
00610000 0x610001
00905a4d 0x905a4e
00000003 0x4
00000004 0x5
0000ffff 0x10000
További információ: .block és ${ } (Alias Interpretáló).
A .foreach token használata egy aliasban
Ha .foreach tokent használ egy alias definíciójában, különös figyelmet kell fordítania a token kibontására. Fontolja meg a következő parancssorozatot.
r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {as myAlias Token}
al
Az első parancs a $t 0 pszeudoregisztrálás értékét 5 értékre állítja. A második parancs törli a myAliashoz korábban hozzárendelt értékeket. A harmadik parancs a ?@$t 0 parancs harmadik jogkivonatát használja, és megpróbálja hozzárendelni a jogkivonat értékét a myAliashoz. A negyedik parancs felsorolja az összes aliast és azok értékeit. Azt várnánk, hogy a myAlias értéke 5, de ehelyett a "Token" szót kapjuk.
Alias Value
------- -------
myAlias Token
A probléma az, hogy a as parancs a .foreach ciklus törzsében, a sor elején található. Amikor egy sor as paranccsal kezdődik, a sor aliasai és tokenjei nem lesznek kibontva. Ha pontosvesszőt vagy üres szóközt helyezünk a as parancs elé, akkor bármely olyan alias vagy token ki lesz bontva, amely már rendelkezik értékkel. Ebben a példában a myAlias nincs kibontva, mert még nem rendelkezik értékkel. A token ki van bontva, mert értéke 5. Itt van ugyanaz a parancssorozat, egy pontosvessző hozzáadásával a as parancs elé.
r $t0 = 5
ad myAlias
.foreach /pS 2 /ps 2 (Token {?@$t0}) {;as myAlias Token}
al
Most megkapjuk a várt kimenetet.
Alias Value
------- -------
myAlias 5
Rekurzív aliasok
Bármely alias definíciójában használhat rögzítettnév-aliast. A rögzített névű alias definíciójában felhasználó által elnevezett aliast is használhat. Ha azonban egy felhasználó által elnevezett aliast szeretne használni egy másik felhasználó által elnevezett alias definíciójában, pontosvesszőt kell hozzáadnia a as vagy a AS parancs előtt, különben az alias cseréje nem történik meg ezen a sorban.
Ha ilyen típusú rekurzív definíciókat használ, a rendszer a használat után minden aliast lefordít. Az alábbi példa például a 3-at jeleníti meg, nem a 7-et.
0:000> r $.u2=2
0:000> r $.u1=1+$u2
0:000> r $.u2=6
0:000> ? $u1
Evaluate expression: 3 = 00000003
Az alábbi példa a 3-at jeleníti meg, nem a 7-et.
0:000> as fred 2
0:000> r $.u1= 1 + fred
0:000> as fred 6
0:000> ? $u1
Evaluate expression: 3 = 00000003
Az alábbi példa is engedélyezett, és a 9-et jeleníti meg.
0:000> r $.u0=2
0:000> r $.u0=7+$u0
0:000> ? $u0
Evaluate expression: 9 = 00000009
Példa aliasokra
Használhat aliasokat, hogy ne kelljen hosszú vagy összetett szimbólumneveket begépelnie, ahogy az alábbi példában is látható.
0:000> as Short usersrv!NameTooLongToWantToType
0:000> dw Short +8
Az alábbi példa hasonló az előző példához, de rögzített név aliast használ.
0:000> r $.u0=usersrv!NameTooLongToWantToType
0:000> dw $u0+8
A gyakran használt parancsokhoz használhat aliasokat makróként. Az alábbi példa kétszer növeli az eax és ebx regisztereket.
0:000> as GoUp r eax=eax+1; r ebx=ebx+1
0:000> GoUp
0:000> GoUp
Az alábbi példa egy alias használatával egyszerűsíti a parancsok beírását.
0:000> as Cmd "dd esp 14; g"
0:000> bp MyApi Cmd
Az alábbi példa hasonló az előző példához, de rögzített név aliast használ.
0:000> r $.u5="dd esp 14; g"
0:000> bp MyApi $u5
Mindkét fenti példa egyenértékű a következő paranccsal.
0:000> bp MyApi "dd esp 14; g"
Tools.ini fájl
A CDB-ben (és az NTSD-ben) előre definiálhatja a rögzítettnév-aliasokat a tools.ini fájlban. Rögzített név aliasának előzetes definiálásához adja hozzá az [NTSD] bejegyzéshez használni kívánt $u mezőket, ahogyan az alábbi példában is látható.
[NTSD]
$u1:_ntdll!_RtlRaiseException
$u2:"dd esp 14;g"
$u9:$u1 + 42
A felhasználó által elnevezett aliasok nem állíthatók be a Tools.ini fájlban.
Fixed-Name aliasok és User-Named aliasok
A felhasználónév-aliasok használata egyszerűbb, mint a rögzített aliasoké. A definíció szintaxisa egyszerűbb, és az al (List Aliases) paranccsal listázhatja őket.
A rögzített névvel ellátott aliasok lecserélődnek, ha más szöveg mellett használják őket. Ha egy felhasználó által elnevezett aliast szeretne lecserélni, amikor az más szöveg mellett van, helyezze azt a ${ } (Aliasértelmező) kifejezésbe.
A rögzített névvel ellátott alias cseréje a felhasználó által elnevezett alias cseréje előtt történik.