gcc -g -O0 -Wall prog.c -o proggdb ./progbreak main、break file.c:42、break func if x>10run [args]、next(單步過)、step(單步入)、continue、finish(跳出當前函數)print var、display expr、watch var、x/10xw addr(檢查內存)bt、frame N、info locals、info argsbreak 100 if i == 500 避免循環中手動單步。break foo commands silent print x continue end
record、reverse-next、reverse-continue 回溯歷史狀態。info threads、thread 2、thread apply all bt。ulimit -c unlimited、gdb ./prog core.1234 事後分析崩潰現場。原因:終端編碼與 libncurses 版本不匹配。
解決:
# 找到寬字符庫並重建符號鏈接 find / -name "libncursesw.so*" rm -f /usr/lib/libncurses.so.5 ln -s /lib64/libncursesw.so.5.7 /usr/lib/libncurses.so.5
或設置環境變量:export LC_ALL=zh_TW.UTF-8(根據系統調整)。
-g 且未 strip。-O0;高優化會消除/重排變量。-fno-inline 或查看反彙編。set breakpoint pending on 允許延遲綁定。臨時方案:set variable var = new_value 強制修改內存;根治:重編譯 -O0 -g。
.gdbinit 配置,儀表盤式顯示寄存器/彙編/堆疊。熟練 GDB 能將調試效率提升數量級,是 C/C++ 開發者的必修內功。