mirror of
https://github.com/TrudeEH/web.git
synced 2025-12-06 08:23:37 +00:00
2.0 KiB
2.0 KiB
title, description, draft, tags, author, showToc
| title | description | draft | tags | author | showToc | |
|---|---|---|---|---|---|---|
| Debugging [GDB] | false |
|
TrudeEH | true |
GDB Debugging
Compile with Debug Information
To allow gdb access to the source code (Provides debug symbols - Do not share publicly as it contains the source code).
gcc -g <file>
Look for / Fix Bugs
First, initialize gdb with the executable to debug.
gdb ./<executable> --tui
After gdb is ready, we can use the following commands:
| Command | Description |
|---|---|
lay next |
Switch to the next layout (Enables TUI mode if disabled - Allows for reading the code while debugging both in C and ASM). |
ref |
Refresh (if a program prints to the terminal, it can break gdb's interface).` |
q |
Quit gdb. |
b main |
Add a breakpoint at the main function. |
b |
Place a breakpoint at the current line. |
b <N> |
Place a breakpoint at line N. |
b +<N> |
Place a breakpoint N lines down. |
b <fn> |
Place a breakpoint at fn function. |
d |
Delete all breakpoints. |
d <N> |
Delete breakpoint number N. |
clear <fn> |
Clear the breakpoint set to fn function. |
n |
Execute up to the next line in C. If a function call is found, execute the function completely. |
s |
Execute up to the next line in C. (Jump over) |
s <N> |
Run N lines. |
u |
Same as n, but if in a loop, execute until the loop exits. |
nexti |
Execute up to the next instruction (line in ASM). |
r |
Run the program until a breakpoint or error is reached. |
c |
Continue running the program until a breakpoint or error is reached. |
x/i $pc |
Examine the previous instruction (View memory). |
info registers |
Read the CPU registers used by the program. |
bt |
See the call stack up to the current line. (How we got here, so to speak) |
print sizeof(<variable>) |
Check the size of a struct/variable/pointer. |
p <var> |
Print variable var value. |
info break |
List breakpoints. |
Check for Memory Leaks
Use valgrind to check for lost memory.
valgrind --leak-check=full ./<executable>