gdb
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| gdb [2014/03/26 17:40] – [Zdroje] djbuldog | gdb [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== GDB ====== | ====== GDB ====== | ||
| + | |||
| + | ===== Výpis paměti ===== | ||
| + | |||
| + | * seznam dostupných proměnných na daném break pointu, lze zjistit pomoci //info locals// | ||
| + | * vypsat hodnotu proměnné/ | ||
| + | * výpis bloku paměti se dělá pomocí x | ||
| + | |||
| + | < | ||
| + | x/nfu addr | ||
| + | x addr | ||
| + | x | ||
| + | </ | ||
| + | |||
| + | * přičemž: | ||
| + | * n - počet prvků k vypsání (normálně číslo) | ||
| + | * f - formát zobrazení (x - hexa, s - string, i - instrukce) | ||
| + | * u - velikost (b bajt, h 2B, w 4B, g 8B) | ||
| + | * addr - adresa v paměti (buď přímo nebo přes název proměnné. Lze použít i operátory */&) | ||
| + | |||
| ===== Příklady ===== | ===== Příklady ===== | ||
| Řádek 30: | Řádek 49: | ||
| #10 0x0000000000000000 in ?? () | #10 0x0000000000000000 in ?? () | ||
| </ | </ | ||
| + | |||
| + | * vypsání lokálních proměnných | ||
| + | < | ||
| + | (gdb) info locals | ||
| + | </ | ||
| + | |||
| * vypsání globálních/ | * vypsání globálních/ | ||
| < | < | ||
| Řádek 124: | Řádek 149: | ||
| </ | </ | ||
| + | * breakpoint se odstraní pomocí delete | ||
| + | < | ||
| + | (gdb) delete | ||
| + | Delete all breakpoints? | ||
| + | </ | ||
| + | |||
| + | ==== rámce ==== | ||
| + | |||
| + | * bt vypíše backtrace | ||
| + | * up/down přepíná kontext mezi rámci | ||
| + | * s, next další krok | ||
| + | * info frame informace o aktuálním rámci | ||
| + | * info args informace o parametrech funkce aktuálního rámce | ||
| + | * finish čekání na exit funkce, odchycení návratového hodnoty | ||
| + | |||
| + | ==== coredump smazané binárky ==== | ||
| + | |||
| + | * při upgrade balíčku (rpm/deb) s binárkou se typicky stává, že spuštěný proces zůstane běžet nad binárkou starou | ||
| + | * nebo pokud se zavolá rm na binárku spuštěného procesu | ||
| + | * nebo pokud chce někdo chránit spuštěný kód (vir) | ||
| + | * procesu pak nelze vytvořit coredump (debugovat přes gdb) | ||
| + | |||
| + | < | ||
| + | # gcore 15659 | ||
| + | core.YGsoec: | ||
| + | / | ||
| + | gcore: failed to create core.15659 | ||
| + | |||
| + | # ls -l / | ||
| + | lrwxrwxrwx. 1 root root 0 Mar 12 21:33 / | ||
| + | </ | ||
| + | |||
| + | * řešení | ||
| + | < | ||
| + | # gdb -p 15659 / | ||
| + | </ | ||
| + | |||
| + | * obraz lze vytvořit pomocí | ||
| + | |||
| + | < | ||
| + | (gdb) generate-core-file | ||
| + | (gdb) detach | ||
| + | </ | ||
| + | |||
| + | |||
| + | * v core dump je rovněž kód binárky (ale pouze ten, co byl aktivně v paměti) | ||
| + | * přístup do paměti binárky, které už nejsou v aktivní paměti, končí segmentation fault | ||
| ===== Zdroje ===== | ===== Zdroje ===== | ||
| + | |||
| + | * [[http:// | ||
| * http:// | * http:// | ||
| Řádek 130: | Řádek 204: | ||
| * http:// | * http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||
| * http:// | * http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
gdb.1395852052.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
