GDB版本:GNU GDB(Ubuntu 8.1.1-0ubuntu1)8.1.1
我无法在gdb中定义具有任意数量参数的命令
我找到了一些解决方法,例如一个最多支持三个参数的命令:
define test_1
if $argc == 1
python args = "$arg0"
end
if $argc == 2
python args = "$arg0 $arg1"
end
if $argc == 3
python args = "$arg0 $arg1 $arg2"
end
python print(gdb.execute(args, to_string=True))
end
用法
test_1 info breakpoints
我尝试了另一种方法,但它不起作用,因为gdb在python执行之前解析$arg<n>
参数,所以args
变量中的"$arg0 $arg1 $arg2"
不会被它们的值替换:
define test_1
python args = ' '.join(f"$arg{i}" for i in range($argc))
python print(gdb.execute(args, to_string=True))
end
问题:如何正确操作Python不是强制性的,其他解决方案(如纯gdb脚本)是允许的
实现这一点最简单、最健壮的方法是使用GDB的Python扩展。生成
gdb.Command
的子类将使您能够访问unsplit参数字符串,作为invoke
的第二个参数。在您的示例用例中,这个字符串可以按原样传递给gdb.execute
还可以使用
gdb.string_to_argv
将其拆分为参数。如果要将参数字符串的一部分传递给gdb.execute
,可以使用string.split
,如本例所示:例如:
如果您不能使用Python,用户定义的命令仍然可以使用
eval
连接其参数,但它的健壮性不如Python(请参见最后的注释)(这需要GDB9.1或更高版本;它的类C表达式计算器将连接相邻的字符串文本。 )
但是,当字符串包含双引号时,使用
eval
将字符串用双引号括起来是有问题的相关问题 更多 >
编程相关推荐