---
# System prepended metadata

title: 程式設計讀書會part 5筆記

---

# 程式設計讀書會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 (#的編號)