GDB:如何从内置python中更改*便利变量*

时间:2014-04-18 08:13:53

标签: python gdb

我已经寻求所有的互联网,我尽我所能,但最后我找不到任何解决方案:如何为 GDB 便利变量分配一些内容内置的 python

我想知道:这应该是一个简单的解决方案,因为我认为这是在尝试实现用户定义函数时出现的主要问题。但我甚至找不到这样一个问题,这太奇怪了......

UPD:添加了一个示例。虽然它很简单 - 在我的真正的函数中,我需要使用指针,这在python中是不存在的......无论如何,一种传递变量的方法 从 python gdb 本身可以帮助我。

一个简单的例子(achtung! - 不起作用):

#accept a string, return it's lenght
define RetLenOfArg
  py arg0 = gdb.parse_and_eval("$arg0")
  set $Retrn = py len(arg0)
end

上面的示例会引发错误。

2 个答案:

答案 0 :(得分: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 :(得分:2)

存在的gdb的python API用于获取/设置便捷性变量:来自https://cryptii.com/pipes/W21RJA

  

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

     

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