Sdílet prostřednictvím


Syntaxe víceprocesoru

KD a WinDbg v režimu jádra podporují ladění více procesorů. Tento druh ladění můžete provést na libovolné multiprocesorové platformě.

Procesory jsou očíslovány nulou až n.

Pokud je aktuální procesor procesorem 0 (to znamená, že je to procesor, který způsobil, že se ladicí program stal aktivním), můžete prozkoumat ostatní neaktuální procesory (procesory jeden až n). V nesoučasných procesorech ale nemůžete nic změnit. Jejich stav můžete jenom zobrazit.

Výběr procesoru

Pomocí příkazu .echocpunum (Show CPU Number) můžete zobrazit čísla procesoru aktuálního procesoru. Výstup z tohoto příkazu vám umožní okamžitě zjistit, kdy pracujete na více procesorovém systému textem v příkazovém řádku ladění jádra.

V následujícím příkladu 0: před výzvou kd> označuje, že ladíte první procesor v počítači.

0: kd>

Pomocí příkazu ~s (Změnit aktuální procesor) můžete přepínat mezi procesory, jak ukazuje následující příklad.

0: kd> ~1s
1: kd>

Nyní ladíte druhý procesor v počítači.

Pokud dojde k přerušení a nemůžete pochopit trasování zásobníku, budete možná muset změnit procesory v multiprocesorovém systému. K přerušení mohlo dojít v jiném procesoru.

Určení procesorů v jiných příkazech

Před několik příkazů můžete přidat číslo procesoru. Tomuto číslu předchází tilda (~), s výjimkou příkazu ~S .

Poznámka V ladění v uživatelském režimu se tilda používá k určení vláken. Další informace o této syntaxi naleznete v tématu Syntaxe vlákna.

ID procesorů nemusí být explicitně odkazována. Místo toho můžete použít číselný výraz, který se přeloží na celé číslo odpovídající ID procesoru. Pokud chcete označit, že výraz by měl být interpretován jako procesor, použijte následující syntaxi.

||[Expression]

V této syntaxi jsou vyžadovány hranaté závorky a výraz představuje jakýkoli číselný výraz, který se překládá na celé číslo odpovídající ID procesoru.

V následujícím příkladu se procesor změní v závislosti na hodnotě uživatelem definované pseudoregistru.

||[@$t0]

Příklady

Následující příklad používá příkaz k (Zobrazit trasování zásobníku) k zobrazení trasování zásobníku z procesoru 2.

1: kd> 2k 

Následující příklad používá příkaz r (Registers) k zobrazení eax registru procesoru tři.

1: kd> 3r eax 

Následující příkaz však zobrazí chybu syntaxe, protože nemůžete změnit stav jiného procesoru než aktuálního procesoru.

1: kd> 3r eax=808080 

Zarážky

Během ladění jádra se příkazy bp, bu, bm (Set Breakpoint) a ba (Break on Access) vztahují na všechny procesory počítače s více procesory.

Například, pokud má aktuální procesor číslo tři, můžete zadat následující příkaz pro umístění breakpointu na SomeAddress.

1: kd> bp SomeAddress 

Pak jakýkoli procesor (nejen první procesor), který provede instrukci na této adrese, způsobí lapač zarážky.

Zobrazení informací o procesoru

Pomocí rozšíření !running můžete zobrazit stav každého procesoru v cílovém počítači. Pro každý procesor může !running také zobrazit aktuální a další pole vlákna z řídicího bloku procesu (PRCB), stav 16 předdefinovaných spinlocků ve frontě a trasování zásobníku.

Pomocí rozšíření !cpuinfo a !cpuid můžete zobrazit informace o samotných procesorech.