Articles of gdb

Come caricare il programma leggendo lo stdin e prendendo i parametri in gdb?

Ho un programma che prende input da stdin e prende anche alcuni parametri dalla riga di comando. Sembra questo: cat input.txt > myprogram -path “/home/user/work” Provo a eseguire il debug del codice con gdb all’interno di emacs, da Mx gdb, provo a caricare il programma con il comando: gdb cat input.txt > myprogram -path “/home/user/work” […]

Come smontare il codice del settore di avvio x86 a 16 bit in GDB con “x / i $ pc”? Viene trattato come 32-bit

Ad esempio, con un settore di avvio che il BIOS stampa sullo schermo main.asm : org 0x7c00 bits 16 cli mov ax, 0x0E61 int 0x10 hlt times 510 – ($-$$) db 0 dw 0xaa55 Poi: nasm -o main.img main.asm qemu-system-i386 -hda main.img -S -s & gdb -ex ‘target remote localhost:1234’ \ -ex ‘break *0x7c00’ \ […]

Come stampare automaticamente ogni riga eseguita in GDB fino al raggiungimento di un determinato punto di interruzione?

Mi piacerebbe essere in grado di impostare un punto di interruzione in GDB, e farlo funzionare fino a quel punto – e nel processo, stampare le righe che ha “attraversato”. Ecco un esempio, basato su questo semplice file con una funzione main e una e due punti di interruzione per ognuno: $ cat > test.c […]

Come posso sapere se una libreria è stata compilata con -g?

Ho alcune librerie compilate su Linux x86 e voglio determinare rapidamente se sono state compilate con i simboli di debug.

Come abilitare gdb pretty printing per gli oggetti C ++ STL in Eclipse CDT?

Sto cercando di aggiungere una bella stampa per gli oggetti STL in eclipse cdt. Ho provato a seguire i passaggi descritti qui: http://sourceware.org/gdb/wiki/STLSupport Ho controllato la cartella Python, ma non riesco a ottenere questo risultato … Ho creato un gdbinit e selezionato per la mia configurazione di debug, ma ogni volta che provo ad avviare […]

Come posso stampare gli elementi di un vettore C ++ in GDB?

Voglio esaminare il contenuto di un file std::vector in GDB, come faccio? Diciamo che è un std::vector per semplicità.

Ispezionare i contenuti del contenitore standard (std :: map) con gdb

Supponendo di avere qualcosa del genere: #include int main(){ std::map m; m[1] = 2; m[2] = 4; return 0; } Mi piacerebbe essere in grado di ispezionare il contenuto della mappa che esegue il programma da gdb. Se provo a usare l’operatore di pedice, ottengo: (gdb) pm[1] Attempt to take address of value not located […]

Binary Bomba – Fase 4

Sto attraversando un periodo molto difficile per rintracciare il codice assembly per la seguente bomba binaria (un incarico da scuola in cui una bomba deve essere disinnescata, questa bomba contiene 6 fasi che hanno tutte 1 input corretto per passare alla fase successiva). Sono attualmente su phase_4 e ha una funzione ricorsiva chiamata func4. Ho […]

Debug dei file core generati nella casella del cliente

Otteniamo file di base dall’esecuzione del nostro software nella casella del cliente. Sfortunatamente perché abbiamo sempre compilato con -O2 senza eseguire il debugging dei simboli questo ha portato a situazioni in cui non siamo riusciti a capire perché si è verificato un arresto anomalo, abbiamo modificato le build in modo che ora generino -g e […]

Il modo migliore per invocare gdb dal programma interno per stampare il suo stacktrace?

Usando una funzione come questa: #include #include #include #include void print_trace() { char pid_buf[30]; sprintf(pid_buf, “–pid=%d”, getpid()); char name_buf[512]; name_buf[readlink(“/proc/self/exe”, name_buf, 511)]=0; int child_pid = fork(); if (!child_pid) { dup2(2,1); // redirect output to stderr fprintf(stdout,”stack trace for %s pid=%s\n”,name_buf,pid_buf); execlp(“gdb”, “gdb”, “–batch”, “-n”, “-ex”, “thread”, “-ex”, “bt”, name_buf, pid_buf, NULL); abort(); /* If gdb […]