Skip to main content

用于调试 MongoDB 服务器的 GDB 漂亮打印机和命令

项目描述

关于

gdbmongo包包含 GDB 漂亮的打印机和用于调试 MongoDB 服务器的命令它的主要目标受众是 MongoDB 员工。

动机

gdbmongo包主要是出于在编写 GDB 漂亮打印机时修补低级结构的乐趣。它的目标有几个明确的领域:

  1. GDB 漂亮的打印机和仅对实时 MongoDB 进程有效的命令对 Sharding 团队的价值有限。这是因为挂起分析器实际上很少有足够的时间在 Evergreen 中成功附加到每个进程。只有运气好,它才能碰巧附着在有问题的人身上。通过遍历内存数据结构而不是通过执行 C++ 代码实现的 GDB 漂亮打印机和命令可以针对核心转储运行,因此适用范围更广。

  2. 每个季度和每年都会发布新版本的 MongoDB 服务器。每个新的 git 分支都会分割用于测试服务器的工具。它可能会导致旧分支上的开发感到陌生和尴尬,因为同时进行了许多新的增强。翻转模型,让一个版本尝试与所有受支持的 MongoDB 版本一起工作,这可能会使更多的东西“正常工作”。另一种思考方式是,新的 GDB 漂亮打印机和命令可能不是为新的 MongoDB 服务器功能而构建的,而是可能是为新发现的调试需求而构建的。

安装

gdbmongo必须加载到 GDB 进程正在运行的 Python 安装中。特别是,从 Python 虚拟环境中启动gdb不会让 GDB 进程访问在虚拟环境中定义的 Python 包。这是因为 gdblibpython动态链接,因此始终使用基本安装的站点包。

将以下代码段添加到 .gdbinit 文件将导致gdb在启动时尝试安装尚未安装的gdbmongo包。

# In your ~/.gdbinit:
python
try:
    import gdbmongo
except ImportError:
    import sys
    if sys.prefix.startswith("/opt/mongodbtoolchain/"):
        import subprocess
        subprocess.run([sys.prefix + "/bin/python3", "-m", "pip", "install", "gdbmongo"], check=True)
        import gdbmongo
    else:
        import warnings
        warnings.warn("Not attempting to install gdbmongo into non MongoDB toolchain Python")

if "gdbmongo" in dir():
    gdbmongo.register_printers()
end

如果您不打算使用 mongodb/mongo 存储库中定义的 GDB 漂亮打印机,那么您可能需要考虑注册gdbmongo包定义的其他一些打印机。

register_printers(*, essentials=True, stdlib=False, abseil=False, mongo_extras=False)

将 gdbmongo 包定义的漂亮打印机注册到 GDB 本身。

gdbmongo-essentials 以外的漂亮打印机集合默认为关闭,以避免与 mongodb/mongo 存储库中定义的漂亮打印机冲突。

用法

gdbmongo包是一个新生的 GDB 扩展,它现在可以做的非常有限但是,如果您希望将全局LockManager的内容转储到核心转储中,则可以运行以下命令:

(gdb) python lock_mgr = gdbmongo.LockManagerPrinter.from_global()
(gdb) python print(lock_mgr.val)

变更日志

0.5.1 (2022-08-25)

  • 修复从 –install-action=hardlink 可执行文件中检测 MongoDB 工具链。

0.5.0 (2022-07-31)

  • 将 BSON 二进制子类型 4 格式化为 UUID。

  • 在 Status 和 StatusWith<T> 的输出中包含 ErrorExtraInfo。

0.4.0 (2022-04-09)

  • 支持在 MongoDB 二进制文件中检测 libstdc++ 版本回 4.2.0 和 4.4.0。

  • 支持解码 BSONObj,即使它们包含超过 datetime.MAXYEAR (= 9999) 的日期。

0.3.0 (2022-03-26)

  • 在 DatabaseShardingState ResourceMutex 的转储中包含数据库名称。

  • 避免在 LockManager 转储中截断命名空间字符串。

0.2.0 (2022-03-05)

  • 支持从 MongoDB 4.2、4.4 和 5.0 的核心转储中转储 LockManager。

0.1.0 (2022-02-26)

  • 初始发行。

  • 支持从 MongoDB 5.3 的核心转储中转储 LockManager。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

gdbmongo-0.5.1.tar.gz (42.7 kB 查看哈希

已上传 source

内置分布

gdbmongo-0.5.1-py3-none-any.whl (44.8 kB 查看哈希

已上传 py3