PCA課件 第六章 嵌入式系統(tǒng)的調試講義_第1頁
PCA課件 第六章 嵌入式系統(tǒng)的調試講義_第2頁
PCA課件 第六章 嵌入式系統(tǒng)的調試講義_第3頁
PCA課件 第六章 嵌入式系統(tǒng)的調試講義_第4頁
PCA課件 第六章 嵌入式系統(tǒng)的調試講義_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章嵌入式系統(tǒng)的調試調試器兩種遠程調試的方案第6章嵌入式系統(tǒng)的調試調試器一調試器遠程調試調試器還是運行于通用桌面操作系統(tǒng)的應用程序,被調試的程序則運行于基于特定硬件平臺的嵌入式操作系統(tǒng)(目標操作系統(tǒng))。一調試器遠程調試問題:調試器與被調試程序如何通信被調試程序產(chǎn)生異常如何及時通知調試器調試器如何控制、訪問被調試程序調試器如何識別有關被調試程序的多任務信息并控制某一特定任務調試器如何處理某些與目標硬件平臺相關的信息(如目標平臺的寄存器信息、機器代碼的反匯編等)。問題:調試器與被調試程序如何通信二兩種主要遠程調試的方案1、插樁(stub)

2、片上調試(OnChipDebugging)二兩種主要遠程調試的方案1、插樁(stub)

1、插樁(stub)

在目標操作系統(tǒng)和調試器內分別加入某些功能模塊,二者互通信息來進行調試。1、插樁(stub)在目標操作系統(tǒng)和調試器內分別加入某些步驟調試器與被調試程序的通信

調試器與目標操作系統(tǒng)通過指定通信端口(串口、網(wǎng)卡、并口)遵循遠程調試協(xié)議進行通信。被調試程序產(chǎn)生異常及時通知調試器

目標操作系統(tǒng)的所有異常處理最終都要轉向通信模塊,告知調試器當前的異常號;調試器據(jù)此向用戶顯示被調試程序產(chǎn)生了哪一類異常。步驟調試器與被調試程序的通信

調試器與目標操作系統(tǒng)通過指定通調試器控制、訪問被調試程序

調試器的這類請求實際上都將轉換成對被調試程序的地址空間或目標平臺的某些寄存器的訪問,目標操作系統(tǒng)接收到這樣的請求可以直接處理。對于沒有虛擬存儲概念的簡單的嵌入式操作系統(tǒng)而言,完成這些任務十分容易。調試器識別有關被調試程序的多任務信息并控制某一特定任務

由目標操作系統(tǒng)提供相關接口。目標系統(tǒng)根據(jù)調試器發(fā)送的關于多任務的請求,調用該接口提供相應信息或針對某一特定任務進行控制,并返回信息給調試器。調試器控制、訪問被調試程序

調試器的這類請求實際上都將轉換成調試器處理與目標硬件平臺相關的信息

第2條所述調試器應能根據(jù)異常號識別目標平臺產(chǎn)生異常的類型也屬于這一范疇,這類工作完全可以由調試器獨立完成。支持多種目標平臺正是GNUGDB的一大特色。調試器處理與目標硬件平臺相關的信息

第2條所述調試器應能根據(jù)幾種Linux內核調試工具1、kdb:只能在匯編代碼級進行調試;

優(yōu)點是不需要兩臺機器進行調試。2、gdb:在調試模塊時缺少一些至關重要的功能,它可用來查看內核的運行情況,包括反匯編內核函數(shù)。3、kgdb:能很方便的在源碼級對內核進行調試,缺點是kgdb只能進行遠程調試,它需要一根串口線及兩臺機器來調試內核(也可以是在同一臺主機上用vmware軟件運行兩個操作系統(tǒng)來調試)幾種Linux內核調試工具1、kdb:只能在匯編代碼級進行調GDB的使用1、GDB主要功能運行你的程序,設置所有的能影響程序運行的東西。保證你的程序在指定的條件下停止。當你程序停止時,讓你檢查發(fā)生了什么。改變你的程序。那樣你可以試著修正某個bug引起的問題,然后繼續(xù)查找另一個bug.

GDB的使用1、GDB主要功能Gdb使用舉例用一個模擬進程調度的原程序os.c作為例子說明gdb的使用方法。1、取得包括原代碼符號的可執(zhí)行代碼gcc

-g

os.c

-o

os

gcc

-g

<原文件.c>

-o

<要生成的文件名>

-g

的意思是生成帶原代碼調試符號的可執(zhí)行文件。

-o

的意思是指定可執(zhí)行文件名。Gdb使用舉例用一個模擬進程調度的原程序os.c作為例子說GDB

is

free

software

and

you

are

welcome

to

distribute

copies

of

it

under

certain

conditions;

type

"show

copying"

to

see

the

conditions.

There

is

absolutely

no

warranty

for

GDB;

type

"show

warranty"

for

details.

GDB

4.16,

Copyright

1995

Free

Software

Foundation,

Inc...

(gdb)(gdb)是提示符,在這提示符下可以輸入命令,直到退出。GDB

is

free

software

and

you

a2、設置gdb的屏幕大小。鍵入:

(gdb)set

width

70

就是把標準屏幕設為70列。3、設置斷點。設置方法:break或b后面加行號或函數(shù)名gdb)break

main或(gdb)b

main

系統(tǒng)提示:Breakpoint

1

at

0x8049552:

file

os.c,

line

455.2、設置gdb的屏幕大小。鍵入:

(g4、運行這個程序,當程序運行到main函數(shù)時程序就會停止返回到gdb的提示符下。運行的命令是run或r(gdb中有不少alias,可以看一下help,在gdb下打help)run

后面可以跟參數(shù),就是為程序指定命令行參數(shù)。顯示:

Starting

program:

<路徑>/os

Breakpoint

1,

main

()

at

os.c:455

455

Initial();

這里455

Initial();是將要執(zhí)行的命令或函數(shù)。4、運行這個程序,當程序運行到main函數(shù)時程序就會停止返回gdb提供兩種方式:1.單步進入,step

into就是跟蹤到函數(shù)內啦。命令是step或s

2.單步,next,就是簡單的單步,不會進入函數(shù)。命令是next或n如用n命令,鍵入:

(gdb)ngdb提供兩種方式:如用n命令,鍵入:

(gdb)nCPU

:

NO

process

running

IO

:

No

process

Waiting

CPU!!!

31474

31475

31476

31477

31478

31479

Waiting

IO

NONE

456

State=WAITING;

最后的一行就是下一句要執(zhí)行的命令。現(xiàn)在在另一個函數(shù)上加斷點。注意:可以用l/list命令來顯示原代碼。(gdb)lCPU

:

NO

process

running

IO

451

main()

452

{

453

int

message;

454

455

Initial();

456

State=WAITING;

457

printf("Use

Control-C

to

halt

\n");

458

signal(SIGALRM,AlarmMessage);

459

signal(SIGINT,InteruptMessage);

460

signal(SIGUSR2,IoMessage);

(gdb)

l

461

alarm(TimeSlot);

462

for(;;)

463

{

464

message=GetMessage();

465

switch(message)

466

{

468

break;

469

case

CHILD_IO:

WaitingIo();

470

break;

451

main()

452

{

453

現(xiàn)在在AlarmMessage上加斷點。

(gdb)

b

AlarmMessage

Breakpoint

2

at

0x8048ee3:

file

os.c,

line

259.

(gdb)

然后我們繼續(xù)運行程序。

(gdb)c

c或continue命令讓我們繼續(xù)被中斷的程序。顯示:

Continuing.

Use

Control-C

to

halt

Breakpoint

2,

AlarmMessage

()

at

os.c:259

259

ClearSignal();現(xiàn)在在AlarmMessage上加斷點。(gdb)

b

A用s/step跟蹤進入這個函數(shù)看看它是干什么的。

(gdb)

s

ClearSignal

()

at

os.c:227

227

signal(SIGINT,SIG_IGN);

用l命令列出原代碼:

(gdb)

l

222

}

223

224

225

void

ClearSignal()

/*

Clear

other

signals

*/

226

{

227

signal(SIGINT,SIG_IGN);

228

signal(SIGALRM,SIG_IGN);

229

signal(SIGUSR2,SIG_IGN);

230

}

231

(gdb)用s/step跟蹤進入這個函數(shù)看看它是干什么的。

(gdb)檢查變量、表達式的值的命令是p或print

格式是p

<表達式>

如:(gdb)

p

WaitingQueue

$1

=

{1,

2,

3,

4,

5,

6,

0}

(gdb)檢查變量、表達式的值的命令是p或print

格式是p

<表達目標操作系統(tǒng)支持遠程調試協(xié)議的通信模塊(包括簡單的設備驅動)多任務調試接口改寫異常處理的有關部分定義一個設置斷點的函數(shù)目標操作系統(tǒng)支持遠程調試協(xié)議的通信模塊(包括簡單的設備驅動)目標操作系統(tǒng)添加的這些模塊統(tǒng)稱為“插樁”若駐留于ROM中則稱為ROMmonitor目標操作系統(tǒng)添加的這些模塊統(tǒng)稱為“插樁”通用操作系統(tǒng)也有具備這類模塊編譯運行于Alpha、Sparc或PowerPC平臺的LINUX內核時若將kgdb開關打開,就相當于加入了插樁。通用操作系統(tǒng)也有具備這類模塊調試過程調試過程Stub的本質軟件接管目標系統(tǒng)的全部異常處理(exceptionhandler)及部分中斷處理在其中插入調試端口通信模塊,與主機的調試器交互不用于正式發(fā)布的調試版Stub的本質軟件接管目標系統(tǒng)的全部異常處理(excepti2.片上調試OnChipDebugging片上調試是在處理器內部嵌入額外的控制模塊,當滿足了一定的觸發(fā)條件時進入某種特殊狀態(tài)在該狀態(tài)下,被調試程序停止運行,主機的調試器可以通過處理器外部特設的通信接口訪問各種資源(寄存器、存儲器等)并執(zhí)行指令。主機通信端口與目標板調試通信接口信號轉換電路板連接2.片上調試OnChipDebugging片上調試是在處PCA課件第六章嵌入式系統(tǒng)的調試講義內嵌的控制模塊以基于微碼的監(jiān)控器(microcodemonitor)或純硬件資源的形式存在包括一些提供給用戶的接口(如斷點寄存器等)具體產(chǎn)品有MotorolaCPU16、CPU32、Coldfire系列的BDM(BackgroundDebugMode),MotorolaPowerPC5xx、8xx系列的EPBDM(EmbeddedPowerPCBackgroundDebugMode),IBM、TI的JTAG(JointTestActionDebug,IEEE標準),還有OnCE、MPSD等等。內嵌的控制模塊以基于微碼的監(jiān)控器(microcodemonEPBDM的執(zhí)行流程相當于用處理器內嵌的調試模塊接管中斷及異常處理。用戶通過設置調試許可寄存器(debugenableregister)來指定哪些中斷或異常發(fā)生后處理器直接進入調試狀態(tài),而不是操作系統(tǒng)的處理程序。1、進入調試狀態(tài)后,內嵌調試模塊向外部調試通信接口發(fā)出信號,通知一直在通信接口監(jiān)聽的主機調試器2、調試器便可通過調試模塊使處理器執(zhí)行任意系統(tǒng)指令(相當于特權態(tài))。EPBDM的執(zhí)行流程相當于用處理器內嵌的調試模塊接管中斷及異3、所有指令均通過調試模塊獲取,所有l(wèi)oad/store均直接訪問內存,緩存(cache)及存儲管理單元(MMU)均不可用4、數(shù)據(jù)寄存器被映射為一個特殊寄存器DPDR,通過mtspr和mfspr指令訪問。5、調試器向處理器送rfi(returnfrominterrupt)指令便結束調試狀態(tài),被調試程序繼續(xù)運行。3、所有指令均通過調試模塊獲取,所有l(wèi)oad/store均OCD(片上調試)的特點優(yōu)點:不占用目標平臺的通信端口無需修改目標操作系統(tǒng)能調試目標操作系統(tǒng)的啟動過程,大大方便了系統(tǒng)開發(fā)人員。缺點:軟件工作量的增加調試器端除了需補充對目標操作系統(tǒng)多任務的識別、控制等模塊針對使用同一芯片的不同開發(fā)板編寫各類ROM、RAM的初始化程序。OCD(片上調試)的特點優(yōu)點:第6章嵌入式系統(tǒng)的調試調試器兩種遠程調試的方案第6章嵌入式系統(tǒng)的調試調試器一調試器遠程調試調試器還是運行于通用桌面操作系統(tǒng)的應用程序,被調試的程序則運行于基于特定硬件平臺的嵌入式操作系統(tǒng)(目標操作系統(tǒng))。一調試器遠程調試問題:調試器與被調試程序如何通信被調試程序產(chǎn)生異常如何及時通知調試器調試器如何控制、訪問被調試程序調試器如何識別有關被調試程序的多任務信息并控制某一特定任務調試器如何處理某些與目標硬件平臺相關的信息(如目標平臺的寄存器信息、機器代碼的反匯編等)。問題:調試器與被調試程序如何通信二兩種主要遠程調試的方案1、插樁(stub)

2、片上調試(OnChipDebugging)二兩種主要遠程調試的方案1、插樁(stub)

1、插樁(stub)

在目標操作系統(tǒng)和調試器內分別加入某些功能模塊,二者互通信息來進行調試。1、插樁(stub)在目標操作系統(tǒng)和調試器內分別加入某些步驟調試器與被調試程序的通信

調試器與目標操作系統(tǒng)通過指定通信端口(串口、網(wǎng)卡、并口)遵循遠程調試協(xié)議進行通信。被調試程序產(chǎn)生異常及時通知調試器

目標操作系統(tǒng)的所有異常處理最終都要轉向通信模塊,告知調試器當前的異常號;調試器據(jù)此向用戶顯示被調試程序產(chǎn)生了哪一類異常。步驟調試器與被調試程序的通信

調試器與目標操作系統(tǒng)通過指定通調試器控制、訪問被調試程序

調試器的這類請求實際上都將轉換成對被調試程序的地址空間或目標平臺的某些寄存器的訪問,目標操作系統(tǒng)接收到這樣的請求可以直接處理。對于沒有虛擬存儲概念的簡單的嵌入式操作系統(tǒng)而言,完成這些任務十分容易。調試器識別有關被調試程序的多任務信息并控制某一特定任務

由目標操作系統(tǒng)提供相關接口。目標系統(tǒng)根據(jù)調試器發(fā)送的關于多任務的請求,調用該接口提供相應信息或針對某一特定任務進行控制,并返回信息給調試器。調試器控制、訪問被調試程序

調試器的這類請求實際上都將轉換成調試器處理與目標硬件平臺相關的信息

第2條所述調試器應能根據(jù)異常號識別目標平臺產(chǎn)生異常的類型也屬于這一范疇,這類工作完全可以由調試器獨立完成。支持多種目標平臺正是GNUGDB的一大特色。調試器處理與目標硬件平臺相關的信息

第2條所述調試器應能根據(jù)幾種Linux內核調試工具1、kdb:只能在匯編代碼級進行調試;

優(yōu)點是不需要兩臺機器進行調試。2、gdb:在調試模塊時缺少一些至關重要的功能,它可用來查看內核的運行情況,包括反匯編內核函數(shù)。3、kgdb:能很方便的在源碼級對內核進行調試,缺點是kgdb只能進行遠程調試,它需要一根串口線及兩臺機器來調試內核(也可以是在同一臺主機上用vmware軟件運行兩個操作系統(tǒng)來調試)幾種Linux內核調試工具1、kdb:只能在匯編代碼級進行調GDB的使用1、GDB主要功能運行你的程序,設置所有的能影響程序運行的東西。保證你的程序在指定的條件下停止。當你程序停止時,讓你檢查發(fā)生了什么。改變你的程序。那樣你可以試著修正某個bug引起的問題,然后繼續(xù)查找另一個bug.

GDB的使用1、GDB主要功能Gdb使用舉例用一個模擬進程調度的原程序os.c作為例子說明gdb的使用方法。1、取得包括原代碼符號的可執(zhí)行代碼gcc

-g

os.c

-o

os

gcc

-g

<原文件.c>

-o

<要生成的文件名>

-g

的意思是生成帶原代碼調試符號的可執(zhí)行文件。

-o

的意思是指定可執(zhí)行文件名。Gdb使用舉例用一個模擬進程調度的原程序os.c作為例子說GDB

is

free

software

and

you

are

welcome

to

distribute

copies

of

it

under

certain

conditions;

type

"show

copying"

to

see

the

conditions.

There

is

absolutely

no

warranty

for

GDB;

type

"show

warranty"

for

details.

GDB

4.16,

Copyright

1995

Free

Software

Foundation,

Inc...

(gdb)(gdb)是提示符,在這提示符下可以輸入命令,直到退出。GDB

is

free

software

and

you

a2、設置gdb的屏幕大小。鍵入:

(gdb)set

width

70

就是把標準屏幕設為70列。3、設置斷點。設置方法:break或b后面加行號或函數(shù)名gdb)break

main或(gdb)b

main

系統(tǒng)提示:Breakpoint

1

at

0x8049552:

file

os.c,

line

455.2、設置gdb的屏幕大小。鍵入:

(g4、運行這個程序,當程序運行到main函數(shù)時程序就會停止返回到gdb的提示符下。運行的命令是run或r(gdb中有不少alias,可以看一下help,在gdb下打help)run

后面可以跟參數(shù),就是為程序指定命令行參數(shù)。顯示:

Starting

program:

<路徑>/os

Breakpoint

1,

main

()

at

os.c:455

455

Initial();

這里455

Initial();是將要執(zhí)行的命令或函數(shù)。4、運行這個程序,當程序運行到main函數(shù)時程序就會停止返回gdb提供兩種方式:1.單步進入,step

into就是跟蹤到函數(shù)內啦。命令是step或s

2.單步,next,就是簡單的單步,不會進入函數(shù)。命令是next或n如用n命令,鍵入:

(gdb)ngdb提供兩種方式:如用n命令,鍵入:

(gdb)nCPU

:

NO

process

running

IO

:

No

process

Waiting

CPU!!!

31474

31475

31476

31477

31478

31479

Waiting

IO

NONE

456

State=WAITING;

最后的一行就是下一句要執(zhí)行的命令。現(xiàn)在在另一個函數(shù)上加斷點。注意:可以用l/list命令來顯示原代碼。(gdb)lCPU

:

NO

process

running

IO

451

main()

452

{

453

int

message;

454

455

Initial();

456

State=WAITING;

457

printf("Use

Control-C

to

halt

\n");

458

signal(SIGALRM,AlarmMessage);

459

signal(SIGINT,InteruptMessage);

460

signal(SIGUSR2,IoMessage);

(gdb)

l

461

alarm(TimeSlot);

462

for(;;)

463

{

464

message=GetMessage();

465

switch(message)

466

{

468

break;

469

case

CHILD_IO:

WaitingIo();

470

break;

451

main()

452

{

453

現(xiàn)在在AlarmMessage上加斷點。

(gdb)

b

AlarmMessage

Breakpoint

2

at

0x8048ee3:

file

os.c,

line

259.

(gdb)

然后我們繼續(xù)運行程序。

(gdb)c

c或continue命令讓我們繼續(xù)被中斷的程序。顯示:

Continuing.

Use

Control-C

to

halt

Breakpoint

2,

AlarmMessage

()

at

os.c:259

259

ClearSignal();現(xiàn)在在AlarmMessage上加斷點。(gdb)

b

A用s/step跟蹤進入這個函數(shù)看看它是干什么的。

(gdb)

s

ClearSignal

()

at

os.c:227

227

signal(SIGINT,SIG_IGN);

用l命令列出原代碼:

(gdb)

l

222

}

223

224

225

void

ClearSignal()

/*

Clear

other

signals

*/

226

{

227

signal(SIGINT,SIG_IGN);

228

signal(SIGALRM,SIG_IGN);

229

signal(SIGUSR2,SIG_IGN);

230

}

231

(gdb)用s/step跟蹤進入這個函數(shù)看看它是干什么的。

(gdb)檢查變量、表達式的值的命令是p或print

格式是p

<表達式>

如:(gdb)

p

WaitingQueue

$1

=

{1,

2,

3,

4,

5,

6,

0}

(gdb)檢查變量、表達式的值的命令是p或print

格式是p

<表達目標操作系統(tǒng)支持遠程調試協(xié)議的通信模塊(包括簡單的設備驅動)多任務調試接口改寫異常處理的有關部分定義一個設置斷點的函數(shù)目標操作系統(tǒng)支持遠程調試協(xié)議的通信模塊(包括簡單的設備驅動)目標操作系統(tǒng)添加的這些模塊統(tǒng)稱為“插樁”若駐留于ROM中則稱為ROMmonitor目標操作系統(tǒng)添加的這些模塊統(tǒng)稱為“插樁”通用操作系統(tǒng)也有具備這類模塊編譯運行于Alpha、Sparc或PowerPC平臺的LINUX內核時若將kgdb開關打開,就相當于加入了插樁。通用操作系統(tǒng)也有具備這類模塊調試過程調試過程Stub的本質軟件接管目標系統(tǒng)的全部異常處理(exceptionhandler)及部分中斷處理在其中插入調試端口通信模塊,與主機的調試器交

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論