--- title: "Debugging and Performance" date: 2019-06-15T10:59:30-04:00 draft: false tags: [ "linux" ] --- I've come to like the GNU Debugger (GDB) and the `perf` tool recently. This post will be a short summary of the various interesting commands you can use. ## GNU Debugger To attach gbd to an existing process do the following ```bash gdb -p pid_of_process ``` Otherwise you can start a new application ```bash gdb name_of_executable ``` Once it loads it will bring you into it's own `REPL` environment. Usually once this comes up I find it useful to add breakpoints to the program. You can either do it by function name or by line number. ```bash (gdb) break FunctionName ``` ```bash (gdb) break code.cpp:81 ``` If you just started a new application you can begin running the program with whatever arguments you wish ```bash (gdb) run -arg1 -arg2 ``` If you have attached to a process then you can continue its execution. ```bash (gdb) continue ``` ### Breakpoints If you have set a breakpoint, it will stop the processes' execution when it lands on the breakpoint. From here, we can take a look at what's on the stack, print variables, and do whatever other debugging we wish. **Print variables on stack:** ```bash (gdb) info locals ``` **Print a specific variable:** ```bash (gdb) print variable_name ``` **Show backtrace:** ```bash (gdb) bt ``` **Continue on with program execution:** ```bash (gdb) continue ``` ## Perf I haven't played with `perf` as much but one thing I found that was cool was the `perf top` command. This command gives you samples of which function calls keeps the program the most busy. To attach to a process and show samples: ```bash perf top -p pid -K ```