用于调试 MongoDB 服务器的 GDB 漂亮打印机和命令
项目描述
关于
gdbmongo包包含 GDB 漂亮的打印机和用于调试 MongoDB 服务器的命令。它的主要目标受众是 MongoDB 员工。
动机
gdbmongo包主要是出于在编写 GDB 漂亮打印机时修补低级结构的乐趣。它的目标有几个明确的领域:
GDB 漂亮的打印机和仅对实时 MongoDB 进程有效的命令对 Sharding 团队的价值有限。这是因为挂起分析器实际上很少有足够的时间在 Evergreen 中成功附加到每个进程。只有运气好,它才能碰巧附着在有问题的人身上。通过遍历内存数据结构而不是通过执行 C++ 代码实现的 GDB 漂亮打印机和命令可以针对核心转储运行,因此适用范围更广。
每个季度和每年都会发布新版本的 MongoDB 服务器。每个新的 git 分支都会分割用于测试服务器的工具。它可能会导致旧分支上的开发感到陌生和尴尬,因为同时进行了许多新的增强。翻转模型,让一个版本尝试与所有受支持的 MongoDB 版本一起工作,这可能会使更多的东西“正常工作”。另一种思考方式是,新的 GDB 漂亮打印机和命令可能不是为新的 MongoDB 服务器功能而构建的,而是可能是为新发现的调试需求而构建的。
安装
gdbmongo包必须加载到 GDB 进程正在运行的 Python 安装中。特别是,从 Python 虚拟环境中启动gdb不会让 GDB 进程访问在虚拟环境中定义的 Python 包。这是因为 gdb与libpython动态链接,因此始终使用基本安装的站点包。
将以下代码段添加到 .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。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。