Jaký je rozdíl mezi příkazem hbreak a break v gdb?


Odpověď 1:

Existují dva základní způsoby, jak nastavit zarážky v kódu.

První, běžnější typ je „softwarový breakpoint“. Když požádáte debugger, aby v určitém příkazu nastavil bod přerušení, najde první instrukci sestavy související s tímto příkazem. Poté nahradí tuto instrukci jinou speciální instrukcí, která po spuštění způsobí, že řízení bude přeneseno z debugee (laděný program) do debuggeru.

Druhým typem je „hardwarový breakpoint“. To vyžaduje specializovanější hardwarovou podporu. S hardwarovými zarážkami ladicí program konfiguruje CPU tak, aby při provádění instrukce na určité adrese přenesl řízení do debuggeru. Pamatujte, že to znamená, že nemusíme měnit samotnou instrukci, stačí znát adresu.

Příkaz „break“ gdb nastaví bod přerušení - ale nezavazuje se k typu bodu přerušení, který bude nastaven. „Hbreak“, na druhé straně, vždy použije hardwarový breakpoint. Opravdu byste tedy měli vždy používat break, pokud nevíte, že konkrétně potřebujete hardwarový breakpoint, a také víte, že gdb to nebude schopen zjistit sám.

Kdy byste ji potřebovali? Pro většinu lidí je odpověď pravděpodobně nikdy. Ale existuje výjimka. Právě jsme řekli, že použití hardwarového bodu přerušení znamená, že kód se nemusí měnit. Pokud tedy z nějakého důvodu nelze kód jednoduše změnit - například pokud je uložen v paměti jen pro čtení - hardwarový breakpoint je do značné míry jedinou možností.

Všimněte si, že existuje související koncept nazývaný hardwarové sledovací body, což je mnohem užitečnější. Ale ty nejsou zasazeny hbreakem. Spíše, jako při přerušení, byste měli použít příkaz „watch“ a gdb rozhodne, jaký druh sledovaného bodu použije, hardware nebo software.