我正在尝试创建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
答案 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
的指针,该指针根本不需要指针。