【问题标题】:How do I write a GDB function to make a comparison to the program counter如何编写 GDB 函数来与程序计数器进行比较
【发布时间】:2013-07-16 03:36:44
【问题描述】:

我正在尝试编写一个循环直到传递的参数等于程序计数器的 gdb 函数。

我正在使用原始 CPU 68332。没有硬件断点。没有支持 GDB 软件断点的操作系统,只有一个指令步骤。 GDB 提供了“next count”的“软件”仿真。 JTAG 提供运行地址。

但是,由于某种原因,JTAG 在用于运行寻址时会使 CPU 不堪重负,并且出现总线错误。我似乎只能可靠地使用“步骤”单指令。

如果我使用 GDB 'step' 到地址,我不会收到总线错误。

下面是我对这样一个 GDB 函数的尝试。

define mtia
    if $argc == 1 then
    set $address = *(unsigned char*)$arg0
    while($address != $pc)
      nexti
    end
end

我似乎无法获得正确的语法才能让 GDB 接受并运行该函数。

正确的语法是什么?

【问题讨论】:

    标签: gdb 68000 jtag


    【解决方案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 上,我只有这些了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2018-10-09
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多