Uživatelské nástroje

Nástroje pro tento web


gdb

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
gdb [2014/04/03 09:09] – [Zdroje] djbuldoggdb [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é/struktury lze pomocí //print// nebo zkráceně //p//
 +  * výpis bloku paměti se dělá pomocí x
 +
 +<code>
 +x/nfu addr
 +x addr
 +
 +</code>
 +
 +  * 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 ?? ()
 </code> </code>
 +
 +  * vypsání lokálních proměnných
 +<code>
 +(gdb) info locals
 +</code>
 +
   * vypsání globálních/statických proměných začínajících na LogF   * vypsání globálních/statických proměných začínajících na LogF
 <code> <code>
Řádek 124: Řádek 149:
 </code> </code>
  
 +  * breakpoint se odstraní pomocí delete
 +<code>
 +(gdb) delete
 +Delete all breakpoints? (y or n) y
 +</code>
 +
 +==== 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)
 +
 +<code>
 +# gcore 15659
 +core.YGsoec:4: Error in sourced command file:
 +/home/dev/bin/daemon/destinyd (deleted): No such file or directory.
 +gcore: failed to create core.15659
 +
 +# ls -l /proc/15659/exe
 +lrwxrwxrwx. 1 root root 0 Mar 12 21:33 /proc/15659/exe -> /home/dev/bin/daemon/destinyd (deleted)
 +</code>
 +
 +  * řešení
 +<code>
 +# gdb -p 15659 /proc/15659/exe
 +</code>
 +
 +  * obraz lze vytvořit pomocí
 +
 +<code>
 +(gdb) generate-core-file
 +(gdb) detach
 +</code>
 +
 +
 +  * 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://www.chemie.fu-berlin.de/chemnet/use/info/gdb/gdb_12.html|ovlivnovani behu programu]]
  
   * http://www.ofb.net/gnu/gdb/gdb_28.html   * http://www.ofb.net/gnu/gdb/gdb_28.html
Řádek 130: Řádek 204:
   * http://www.stanford.edu/class/archive/cs/cs143/cs143.1112/materials/other/1637.pdf   * http://www.stanford.edu/class/archive/cs/cs143/cs143.1112/materials/other/1637.pdf
   * [[http://www.delorie.com/gnu/docs/gdb/gdb_39.html|GDB a signály]]   * [[http://www.delorie.com/gnu/docs/gdb/gdb_39.html|GDB a signály]]
 +  * [[http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_chapter/gdb_9.html|jak vycitat promenne, ...]]
  
   * http://stackoverflow.com/questions/16814706/how-does-gdb-attach-to-multi-threaded-process   * http://stackoverflow.com/questions/16814706/how-does-gdb-attach-to-multi-threaded-process
-  * http://rsquared.sdf.org/gdb/abaw.html+  * [[http://rsquared.sdf.org/gdb/abaw.html|Jak nastavit breakpoints v GDB?]]
   * [[http://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/gdb/Source-Path.html|kde hleda GDB source soubory?]]   * [[http://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/gdb/Source-Path.html|kde hleda GDB source soubory?]]
  
gdb.1396508974.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki