我正在尝试编写一个循环的gdb函数,直到传递的参数等于程序计数器。
我正在使用原始CPU,68332。没有硬件断点。没有支持GDB软件断点的操作系统,只需一个指令步骤。 GDB提供'nexti count'的'软件'仿真。 JTAG提供了一个运行来解决。
然而,由于某种原因,JTAG在用于运行寻址时会压倒CPU,并且我得到总线错误。我似乎只能可靠地使用'step'单指令。
如果我使用GDB“步进”地址,我不会收到总线错误。
以下是我对这种GDB功能的尝试。
define mtia
if $argc == 1 then
set $address = *(unsigned char*)$arg0
while($address != $pc)
nexti
end
end
我似乎无法使语法正确,以便能够让GDB接受并运行该函数。
正确的语法是什么?
答案 0 :(得分:1)
上面GDB命令函数的正确语法是
define mtia
if $argc == 1 then
set $address = (unsigned char*)$arg0
while($address != $pc)
nexti
end
end
我在(unsigned char *)前面有一个星号。这删除了指针类型。 这导致$ address!= $ pc的语法错误,因为$ pc被认为是一个指针。
此函数执行单个汇编指令步骤,直到到达传递给函数的地址。慢,但在旧的M68332 CPU上,这就是我的全部。