在GDB用户定义的命令中使用&符号(按位和)的语法错误

时间:2018-03-02 21:02:20

标签: gdb

我正在尝试创建GDB用户定义的命令。

def decodecs
  if $argc == 1
    set $lowaddr=(short*)($arg0)
    x /h $lowaddr
    # The line below generates the error
    set $lowaddr=$lowaddr & (short)0xfff8
    x /h $lowaddr
    set $lowaddr=$lowaddr >> (short)3
    set $highaddr = (short*)($arg0+2)
    x /h $highaddr
  end

GDB报告的错误是:

Argument to arithmetic operation not a number or boolean

我已将语言设为c。 set language c

在第一个和第二个' x ...'之间报告错误消息。输出。

当我在GDB提示符下键入命令时,我没有收到错误,操作按预期工作。

我正在调试遗留程序。它没有GDB兼容的调试符号。

我正在为M68k使用GDB交叉,v4.3.2

1 个答案:

答案 0 :(得分:0)

此:

set $lowaddr=(short*)($arg0)

创建类型为short*的GDB便利变量。 GDB将拒绝对任何非数字的任何操作进行按位操作,这可以从尝试中看出:

(gdb) set $foo = (short*)0x1234
(gdb) p $foo
$1 = (short *) 0x1234
(gdb) p $foo & 0xff
Argument to arithmetic operation not a number or boolean.

因此,对整数执行操作,并仅在必要时强制转换为指针。在您的代码段中,您只使用指向x/h的指针,该指针根本不需要指针