# 程式設計讀書會part 5筆記 時間:2023/11/29 講者:吳文元 ## debug -g 編譯參數: 沒有的話就會看到一堆pointer Frame : 每次function call 都會產生一個frame,堆疊起來,每次function return 都會退回frame ## Valgrind - 功能 - 非法記憶體位置存取 - 未初始化的記憶體存取 - memory leak - 缺點: 慢20~50倍 - 用法: ```valgrind ./main``` ## Address Sanitizers - 用法: -fsanitizer=address -lubsan -lasan ## Debugger - GDB - 功能 - 斷點 (breakpoint): 中斷程式,開始檢查 - 觀察記憶體 - 捕捉訊號 - 用法 編譯: ```gcc -g a.c``` 執行: ```gdb ./a.out``` ``` shell = break for.c:7 // 設定斷點 run // 開始跑 (暫停在line 7 p sum // 印出sum變數 ``` - (r )un - (p ) rint - (b ) reak - (c )ountinue - Ctrl+c 會強制進入斷點 - bt (back trace) - 印出 frame - frame 1 (#的編號)