1. 程式人生 > >mac下安裝使用gdb除錯

mac下安裝使用gdb除錯

安裝

brew install gdb 安裝gdb

start除錯報錯

Unable to find Mach task port for process-id 15634: (os/kern) failure (0x5).
During startup program terminated with signal ?, Unknown signal.

證書建立過程參考:
http://www.jianshu.com/p/99b057d5566f 

google說沒有code-sign,安裝步驟一步一步證書籤名認證,重啟電腦,還是報錯:
Starting program: /Users/Nj/www/C/test/test 
[New Thread 0x1603
of process 1648] warning: unhandled dyld version (15) > echo "set startup-with-shell off" >> ~/.gdbinit 按照提示資訊建立gdbinit檔案,並更改許可權755 關掉終端,重啟系統,終於可以start了~~~
gdb使用

gdb常用命令

file 裝入想要除錯的程式
run 執行當前被除錯的程式
kill 終止當前被除錯的程式
step 執行一行原始碼而且進入函式的內部
next 執行一行原始碼,但不進入函式的內部
break 在程式碼裡設定斷點,會使程式執行到這裡時被掛起
print

列印變數或者表示式的值,或列印記憶體中某個變數開始的一段連續區域的值,還用來對變數賦值
display 設定自動顯示的表示式或者變數,當程式停住或者再單步跟蹤的時候,這些變數會自動顯示當前值
list 列出產生執行檔案的原始碼的一部分
quit 退出gdb
watch 監視一個變數的值
backtrace 回溯跟蹤
frame n 定位到發生錯誤的程式碼段 n為backtrace命令的輸出結果中的行號
examine 檢視記憶體地址中的值
jump 使程式跳轉
signal 產生訊號量
return 強制函式返回
call 強制呼叫函式
make 使使用者不退出gdb就可以重新產生可執行檔案
shell
是使用者不離開gdb就可以執行shell命令

p(print)<expr> 列印變數的值
p/x 十六進位制列印
p/d 十進位制列印
p/u 十六進位制無符號數列印
p/o 八進位制列印
p/t 二進位制列印
p/c 按字元格式

s(step) 執行下一條指令,並進入指令的內部
n(next) 執行下一條指令,不進入指令的內部
display 自動顯示變數的值
undisplay 刪除自動顯示
disable display <dnum> 不刪除,只是讓它失效
info display 顯示所有設定的自動顯示

x(examine) 檢視記憶體
x/<n/f/u> <addr>
n是正整數,表示顯示的記憶體長度,也就是從當前地址向後顯示幾個地址的內容
f是顯示的格式字串格式s 指令地址i
u表示從當前地址向後顯示幾個位元組預設4個,b表示單位元組、h表示雙位元組、w表示4個位元組、g表示8個位元組

show convenice 顯示所有的環境變數
set $foo = bar 設定一個環境變數

set $a = 1;
p $a + 1; //可以得到2

info registers 顯示暫存器的情況(不包括浮點暫存器)
info all-register 檢視所有暫存器的情況
info registers <regname> 檢視指定暫存器的情況
也可以使用print檢視,只需要在暫存器的名字前加上一個$符號就可以了

檢視源程式
list <linenum> 顯示指定行周圍的程式碼
list <function> 顯示函式名為function的函式的源程式
list <first>,<end> 顯示first end之間的程式碼
show listsize 檢視當前設定的顯示行數
set listsize <count> 設定一次顯示的行數
list 顯示當前行後邊的源程式

disassemble 檢視程式的彙編程式碼

改變程式的執行
使用print num=.. 來改變程式中的值

檢視記憶體地址
info line X X可以是行號、檔名:行號、函式名、檔名:函式名的形式

跳轉執行
jump <linespec> linespec可以是檔案行號,也可以是file:line的形式或者是+num這種格式,表示下一條執行語句從哪裡開始
jump <address> 表示跳轉到哪一程式碼行的執行地址
return <expr> 強制函式返回
call <expr> 強制呼叫函式
show language 檢視當前的語言環境
info frame 檢視當前函式的程式語言
info source 檢視當前檔案的程式語言