-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Testing Infrastructure
-
Server Tooling & Methods
Proposed directory structure:
- gdb/mongo/__init__.py: see below
- gdb/mongo/commandutil.py: see below
- gdb/mongo/backtrace.py: mongodb-uniqstack (
SERVER-27877), mongodb-bt-active-only (SERVER-27727) - gdb/mongo/locking.py: mongodb-show-locks (
SERVER-27874), mongodb-waitsfor-graph (SERVER-27874), mongodb-deadlock-detect (not filed yet) - gdb/mongo/printers.py: All XXPrinter classes and the build_pretty_printer() function from
SERVER-26634
The .gdbinit file and hang_analyzer.py would then source buildscripts/gdb/mongo/.
gdb/mongo/_init_.py
from __future__ import absolute_import import importlib as _importlib import pkgutil as _pkgutil def _load_all_modules(): """Dynamically loads all modules in the 'mongo' package so that any commands declared within them are registered. """ for (_, module, _) in _pkgutil.walk_packages(path=__path__): _importlib.import_module("." + module, package=__name__) _load_all_modules()
gdb/mongo/commandutil.py
from __future__ import absolute_import # TODO: Combine the logic of this function with register_mongo_command() to support the # "mongodb-help" command. def register(name, command_class, **kwargs): """Registers a gdb command. @commandutil.register("hello-world", gdb.COMMAND_USER) class HelloWorld(gdb.Command): '''Greet the whole world.''' def invoke(self, arg, from_tty): print("Hello, World!") """ def wrapper(cls): # A GDB command is registered by calling gdb.Command.__init__(). We construct an instance of # 'cls' so the command is automatically registered as a result of decorating a class with # the register() function. cls(name, command_class, **kwargs) return cls return wrapper