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

问题描述 投票:1回答:1

我正在尝试创建一个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

gdb
1个回答
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的指针,它根本不需要指针。

© www.soinside.com 2019 - 2024. All rights reserved.