GDB:如何从内置python更改便捷变量

问题描述 投票:3回答:2

如何从内置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
python gdb
2个回答
3
投票

接受字符串,返回长度

如果确实需要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)

1
投票

存在用于获取/设置便捷变量的gdb的python API:documentation

功能:gdb.convenience_variable(名称)返回便捷变量(请参见Convenience Vars)命名为name。名称必须是串。名称中不应包含用于标记“表达式中的便捷变量。如果方便变量不存在,则返回None。

功能:gdb.set_convenience_variable(名称,值)设置便利变量(请参见Convenience Vars)命名为name。名称必须是一个字符串。名称中不应包含用于标记的“ $”表达式中的便利变量。如果值为None,则便利变量已删除。否则,如果值不是gdb.Value(请参见劣等值),使用gdb.Value构造函数。

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