GDB ARMulator 使用方法

2021-06-09 19:05:29 字數 3193 閱讀 2871

1.gdb/armulator基本介紹

gdb/armulator是gdb自帶的乙個armulator(arm模擬器,實際上應該是有不止乙個軟體包含這個功能,例如ads,他們都叫armulator),不過我檢視

gdb的源**都是對

arm6

的模擬,而現在比較常見的是打過

uclinux

開發組patch

的gdb/armulator

,這樣這個模擬器主要就是對

atmel at91

扳進行了模擬,而我所學習的也是這個版本,更多的資訊可以到下面的url去看。

2.gdb/armulator編譯安裝和基本使用

2.1.

編譯安裝

基本使用

將你做好的檔案系統鏡象檔案改名為

boot.rom(這個檔案和下面用的linux.2.4.x檔案都可以在上面提到的位址下到),做軟連線也可以,然後在這個目錄中:

arm-elf-gdb linux.2.4.x

target sim

load

run

這樣你就能看見uclinux在模擬器上跑起來了。

3.gdb/armulator**閱讀記錄

gdb相關的**很多,跟armulator相關的**也不少,所以**的閱讀主要是跟著剛才跑通起uclinux使用的命令涉及的**,其中很多地方都是用gba除錯arm-elf-gdb的方式幫助閱讀。

3.1.arm-elf-gdb linux.2.4.x

3.1.1.對sim的初始化

因為sim是作為gdb的乙個target(應該可以稱為除錯目標吧呵呵)存在的,所以在gdb執行的時候,要先對這個target進行初始化。在remote-sim.c檔案中的函式_initialize_remote_sim就是對這個target的初始化函式,而這個函式將在啟動的時候被呼叫。在這個函式中有3個操作:

第1個操作,呼叫

init_gdbsim_ops

函式,這個函式用來初始化全域性結構變數

gdbsim_ops

,其的結構型別是target_ops,每個gdb中的target都有這麼乙個結構,這個結構定義在target.h檔案中。這個變數的作用就是當除錯開始的時候,

gdb可以通過結構找到相應的對

target

進行控制的函式。

第2個操作,呼叫

add_target

將前面初始化好的

gdbsim_ops

增加到target_structs

中用來方便系統對這個結構的使用。

第3個操作,用

add_com

給gdb

增加了乙個命令

sim,

這個命令通過呼叫sim_do_command這個函式可以幫助實現向sim傳送命令,這個功能將在後面進行一次實際的應用,在那再詳細介紹。

還有一點比較重要,sim目錄下包含了很多cpu相關的目錄,其中就有arm目錄,這就是最基本的armulator的**,gdb對armulator的控制就是通過target的介面函式呼叫armulator的函式來完成的。

3.1.2.對linux.2.4.x的讀入

因為這個讀入的操作跟使用命令file進行讀入是基本一樣的,所以對file命令的過程進行分析。

在使用者執行file命令後,將呼叫exec.c檔案中的函式file_command。在這個函式呼叫的函式exec_file_command

用來將可執行檔案開啟,在其中target_preopen函式會檢查前面是否有檔案開啟執行等等,並向使用者提問是否進行清除,exec_file_attach則是具體的開啟檔案的操作,在這裡開啟了乙個可執行檔案結構exec_bfd,這將在後面被用到。symbol_file_command

函式用來將符號表等進行初始化。

而在啟動對可執行檔案的讀入在main.c檔案中的函式captured_main對exec_file_command和symbol_file_command進行了呼叫。

3.2.target sim

在這裡主要完成對

sim的初始化的工作,這些工作是通過呼叫

remote-sim.c

檔案中的函式

gdbsim_open

函式來完成的。

此命令的作用是將要除錯的機器**裝入

armulator

在執行指令後被呼叫的是remote-sim.c中的函式gdbsim_create_inferior,在開始是對當前情況進行了一些檢查和清除過去資訊的工作。

接著做的是根據函式

gdbsim_create_inferior

的引數exec_file

和args

構造命令列啟動引數

argv

,其中exec_file中是前面開啟的kernel的完整路徑名,而args中就是run後面跟著的執行引數,如果沒有就是空字串,整理後的多層指標中就依次在每個指標中儲存了啟動引數。

接著呼叫

檔案中的函式

sim_create_inferior

來對armulator

進行近一步的初始化。

一開始又是一次對armulator中pc暫存器的初始化,這次因為是按照引數可執行檔案控制代碼結構abfd也就是全域性變數exec_bfd進行的。這個變數是在3.2部分介紹的過程初始化的,所以pc也是由這個結構決定的。

然後是根據argv的值對state->commandline進行初始化,實際就是依次將其中引數用空格分隔拷貝進去。

最後是根據env對state->memsize進行設定。函式返回。

設定記錄模擬器下層程序

pid的

inferior_pid為42

,這麼做因為在當前的情況下並沒有單獨的程序進行模擬,所以只進行這個設定表明模擬已經開始。

呼叫函式

insert_breakpoints

將剛才清除掉的斷點重新加入**中。用函式

clear_proceed_status

清楚掉以前程式執行的資訊。

呼叫infrun.c

中的函式

proceed

開始armulator

給gdb/armulator增加個小功能單步除錯自動反編譯

dbms output put line使用方法

begin dbms output.put line a end 如果你是再sql plus中,只要再環境中打出 set serveroutput on 就可以了.還有一種方法 就是使用環境中的繫結變數也可以.再環境中定義 variable name varchar2 50 然後把過程新增乙個out...

sp addlinkedserver使用方法

exec sp droplinkedsrvlogin dbvip,null exec sp dropserver dbvip exec sp addlinkedserver server dbvip 被訪問的伺服器別名 srvproduct provider sqloledb datasrc ser...

SQL Server Profiler使用方法

一 sql server profiler使用方法 1 單擊開始 程式 microsoft sql server 2005 效能工具 sql server profiler,如下圖 2 彈出sql server profiler視窗,如下圖 3 在工作視窗內,滑鼠單擊 檔案 新建跟蹤 n 彈出資料庫...