2013-07-05 69 views
1

我正在使用GDB以及一個JTAG設備,一個Abatron BDI2000,調試運行在摩托羅拉M68332上的程序。問題與GDB,JTAG和CPU32

68332沒有任何硬件斷點寄存器。它具有非常原始的調試功能。 構建工具不會生成'elf'文件,所以沒有符號供GDB使用。 另外,我正在調試的程序正在Flash中運行。

事實上,68332只有一個調試指令ti。 ti自己的步驟到下一個彙編指令。 ti xxx步驟,直到到達地址xxx。 [是的,這是穴居人日子,冷錘和鑿子:)]

我能夠使用GDB與目標遠程連接到BDI2000併發出GDB命令'nexti'。由於68332的限制,'stepi'相當於'nexti'。

單步只有命令可用。

監視器命令'監視器ti'狀態將程序計數器更改爲步驟。

若用「監視」命令更改寄存器,然後GDB不知道變成不同步的命令和寄存器高速緩存。我創建了GDB函數,每個函數的末尾都有GDB命令'flushregs'。這標誌着寄存器緩存髒。 GDB命令將獲取一組新的寄存器。

我想創建一個用於調試的符號表文件,但是沒有找到關於GDB符號文件格式的任何文檔。

是否有替代我設置? 我有一個RAM覆蓋的Flash區域。這會允許軟件斷點嗎?

在此先感謝您的任何建議。

回答

0

我發現,因爲我不是在程序中使用過的符號一下子我可以用「方便」變量作爲符號的替代品。

set $Symbol=(unsigned int*)<address> 

每個'符號'被聲明爲一個指向一個地址的無符號int的指針。可以將這些語句放在.gdbinit中,並隨着時間的推移添加到它們中。

人們可以然後狀態

break $Symbol 

我示出可以在下面鏈接的問題予以通過這些「方便」的變量中的一個的命令GDB功能。

How do I write a GDB function to make a comparison to the program counter