gdb除錯
阿新 • • 發佈:2020-08-08
生成除錯程式
準備一個.c 或.cpp檔案
gcc program.c
gcc -g program.c
g++ program.cpp
g++ -g program.c
引數 -g 生成可執行檔案可用於gdb除錯
引數 -o 指定生成檔名
常用操作
檢視程式 list/l 行號 函式 執行 run/r quit/q 斷點 breakpoints/b 行號 函式名 info/i b 檢視斷點 delete b 序號 除錯 next/n 步進 step/s 步入 continue/c 執行到下個斷點 檢視除錯資訊 print/p 變數 函式 display 變數 undisplay 變數 breaktrace/bt 函式呼叫 i locals 當前函式區域性變數的值 i registers 檢視暫存器 skip function
gdb多程序除錯
比常用操作多了
set detach-on-fork off 允許多進行除錯
info inferiors 檢視程序
inferior num 切換程序
gdb多執行緒除錯
多執行緒操作需要新增 -lpthread選項。原因是pthread不是linux下的預設庫,不加選項就會在連結時找不到pthread庫的入口地址,導致連結失敗
gcc -g program.c -o program -lpthread
比常規操作多了
info threads 檢視執行緒 thread num 切換執行緒【執行緒近似併發,切換到某執行緒並不會影響其他執行緒的執行】
建立執行緒會出現
[New Thread 0x7ffff77f0700 (LWP 25991)]
這裡的LWP表示這是輕量級執行緒 後面的25991是執行緒號
檢視執行緒可以用
ps -aL
####### 測試過的兩個例子
set scheduler-locking on 只運行當前執行緒
set scheduler-locking off 所有執行緒同步執行
對複雜一點的程式沒什麼用
在docker內部使用gdb
在建立容器時加上 --privileged=true 選項
docker下不加上述選項為什麼gdb會失敗的原因
https://www.jianshu.com/p/7ba162b700ca