GDB和insight下的debug

在繼續linux kernel的工作之前,忙裏偷閒我們看一下linux下的debug工具。這裏主要學習GDB和insight的使用

 

1. 安裝GDB

一般系統中應該都已經安裝了gdb,如果沒有安裝的話

sudo apt-get install gdb

 

2. 源代碼樣例

採用的是來自於http://opencsl.openfoundry.org/Lab05_debugger.rst.html的代碼

文件test.c

 

#include<stdio.h> char* encode(char* str){ char* tempStr = str; while( *tempStr != 0 ){ (*tempStr)++; tempStr++; } } int main(int argc, char* argv[]){ int i; for(i = 0; i &lt; argc; i++){ encode(argv[i+1]); printf("%s\n", argv[i+1]); } } 3. 編譯 gcc -g -o test test.c

記住參數裏面需要加-g,表明gdb的debug

 

4. 開始調試

gdb ./test

 

5. 運行

run

可以看到出錯的提示信息

 

6. list命令

list命令主要是列出源代碼,可以試試如下命令,看不同的效果

list

list, 5

list encode, 5

 

7. 斷點命令是b

這裏列兩個斷點

b encode

b 10

 

8. 開始運行

set args abc, osss

run

 

繼續的方式

  1. continue ,或是簡寫 cont、c

    continue 的意思是繼續執行到下一個中斷點或是程式結束為止。

  2. next ,或是簡寫 n

    next 是一次執行一行程式碼,當程式碼是呼叫函式時, GDB 只會把它視為一行程式碼。

  3. step ,或是簡寫 s

    step 和 next 類似,但當碰到函式呼叫時, GDB 會進入函式中逐行執行。

9. 顯示寄存器的值

p args

p str

p encode

 

只顯示頭兩個字符

p str[0]@2

 

16進制顯示

p/x str[0]@2

 

10. info命令的使用

info 則是顯示各種 GDB 內設定、程式執行狀況的指令。目前設定的中斷點、 display ,或是 CPU registers 的內容都可以用這個指令辦到,如:

# 顯示目前設定的中斷點 (gdb) info b # 顯示目前設定的 display (gdb) info display # 顯示 eax 的值 (gdb) info register eax

 

11. gdb的推出使用命令quit

 

12. insight的使用

如果使用過windows下的IDE,那麼insight應該很快就可以上手。操作過程基本相同。

sudo apt-get install insight

insight

 

注意insight是完全基於gdb的IDE,現在已經有功能更加強大的linux下的IDE,比如Eclipse

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章