如何从内置python向gdb 便捷变量分配某些内容?我认为它应该很简单,因为它在尝试实现用户定义的功能时自然会出现。但是我什么也找不到。
UPD:添加了一个简化示例。我的实际功能虽然更复杂。无论如何,一种将变量从python传输到gdb的方法将大有帮助。
用法示例(出现错误!–引发错误):
#accept a string, return it's lenght
define RetLenOfArg
py arg0 = gdb.parse_and_eval("$arg0")
set $Retrn = py len(arg0)
end
接受字符串,返回长度
如果确实需要strlen,可以使用$_strlen
-内置的gdb便捷函数,用于计算字符串长度:
(gdb) set $Retrn=$_strlen("test")
(gdb) p $Retrn
$4 = 4
如何通过内置python向GDB便利变量分配某些内容?
您可以使用gdb.execute:
>more my_own_len.py
class my_own_len (gdb.Function):
def __init__ (self):
super (my_own_len, self).__init__ ("my_own_len")
def invoke (self, arg):
res=len(arg.string())
gdb.execute( "set $Retrn=" + str(res))
return res
my_own_len()
这是一个测试:
>gdb -q -x my_own_len.py
(gdb) p $_strlen("test")
$1 = 4
(gdb) p $my_own_len("test")
$2 = 4
(gdb) p $Retrn
$3 = 4
(gdb)
存在用于获取/设置便捷变量的gdb的python API:documentation
功能:gdb.convenience_variable(名称)返回便捷变量(请参见Convenience Vars)命名为name。名称必须是串。名称中不应包含用于标记“表达式中的便捷变量。如果方便变量不存在,则返回None。
功能:gdb.set_convenience_variable(名称,值)设置便利变量(请参见Convenience Vars)命名为name。名称必须是一个字符串。名称中不应包含用于标记的“ $”表达式中的便利变量。如果值为None,则便利变量已删除。否则,如果值不是gdb.Value(请参见劣等值),使用gdb.Value构造函数。