如何在 GDB 上获取用 python 编写的新函数?

How to source a new function written in python on GDB?

为了在 GDB 上使用它,我在 python 中编写了新的便利函数(greet.py)。

class Greet (gdb.Function):
     """Return string to greet someone.
     Takes a name as argument."""

    def __init__ (self):
         super (Greet, self).__init__ ("greet")

    def invoke (self, name):
         return "Hello, %s!" % name.string ()

Greet ()

现在我想在 GDB 上使用它作为便利函数。在 GDB 上调试程序时,我应该执行哪些步骤才能使用它?

为了在 GDB 中编写新的便利函数:

  1. 编写函数放在"~/gdb/python/lib/gdb/function"
import gdb 

class Salam(gdb.Function):
    """Return string to greet someone.
    Takes a name as argument."""

    def __init__(self):
        super(Salam, self).__init__("salam")

    def invoke(self, name):
        return "Salam, jenap %s!" % name.string ()

Salam()
  1. 编辑“~/gdb/data-directory/Makefile.in”并在“PYTHON_FILE_LIST”下添加“gdb/function/salam.py”
  2. ./配置
  3. 制作
  4. 进行安装

现在,#gdb之后 尝试输入:“print salam("Aman")"

为了使便利功能起作用,它必须在 GDB 下 python 支持。

如您所见,没有内置的用户目录可以自动加载脚本。

通常用户会从他们的 ~/.gdbinit 文件中获取单独的脚本,如下所示:

source /home/user/gdb/scripts/my-script.py

如果用户真的希望从目录中自动获取脚本,而不必将它们添加到他们的 ~/.gdbinit 中,则可以通过将以下内容添加到 ~/.gdbinit 中轻松完成:

python
import os
directory = '/home/user/gdb/scripts/'
if os.path.isdir (directory):
  for filename in sorted (os.listdir(directory)):
    if filename.endswith (".py") or filename.endswith (".gdb"):
      path = os.path.join(directory, filename)
      gdb.execute ("source {}".format (path))
end

这将从 /home/user/gdb/scripts/.

加载所有 *.py*.gdb 脚本