From 0915b3ef56dfac3113cce55a59a5765dc94976be Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:34:54 +0200 Subject: Adding upstream version 2.13.6. Signed-off-by: Daniel Baumann --- tools/debug/gdb/.gitignore | 1 + tools/debug/gdb/README.md | 40 ++++++++++++++ tools/debug/gdb/gdbinit | 25 +++++++++ tools/debug/gdb/icingadbg.py | 64 ++++++++++++++++++++++ .../debug/natvis/Visualizers/icinga2.natstepfilter | 9 +++ tools/debug/natvis/Visualizers/icinga2.natvis | 32 +++++++++++ tools/debug/natvis/[Content_Types].xml | 1 + tools/debug/natvis/extension.vsixmanifest | 18 ++++++ 8 files changed, 190 insertions(+) create mode 100644 tools/debug/gdb/.gitignore create mode 100644 tools/debug/gdb/README.md create mode 100644 tools/debug/gdb/gdbinit create mode 100644 tools/debug/gdb/icingadbg.py create mode 100644 tools/debug/natvis/Visualizers/icinga2.natstepfilter create mode 100644 tools/debug/natvis/Visualizers/icinga2.natvis create mode 100644 tools/debug/natvis/[Content_Types].xml create mode 100644 tools/debug/natvis/extension.vsixmanifest (limited to 'tools/debug') diff --git a/tools/debug/gdb/.gitignore b/tools/debug/gdb/.gitignore new file mode 100644 index 0000000..1c9c744 --- /dev/null +++ b/tools/debug/gdb/.gitignore @@ -0,0 +1 @@ +icingadbg.pyc diff --git a/tools/debug/gdb/README.md b/tools/debug/gdb/README.md new file mode 100644 index 0000000..b00f81a --- /dev/null +++ b/tools/debug/gdb/README.md @@ -0,0 +1,40 @@ +# Pretty Printer Installation + +Requirements: +* icinga2 debug symbols +* boost, gcc, etc debug symbols + +Install the `boost`, `python` and `icinga2` pretty printers. Absolute paths are required, +so please make sure to update the installation paths accordingly (`pwd`). + +Boost Pretty Printers: + + $ mkdir ~/.gdb_printers && cd ~/.gdb_printers + $ git clone https://github.com/ruediger/Boost-Pretty-Printer.git && cd Boost-Pretty-Printer + $ pwd + /home/michi/.gdb_printers/Boost-Pretty-Printer + +Python Pretty Printers: + + $ cd ~/.gdb_printers + $ svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python + +Icinga 2 Pretty Printers: + + $ mkdir -p ~/.gdb_printers/icinga2 && ~/.gdb_printers/icinga2 + $ wget https://raw.githubusercontent.com/Icinga/icinga2/master/tools/debug/gdb/icingadbg.py + +Now you'll need to modify/setup your `~/.gdbinit` configuration file. +You can download the one from Icinga 2 and modify all paths. + +> **Note** +> +> The path to the `pthread` library varies on distributions. Use +> `find /usr/lib* -type f -name '*libpthread.so*'` to get the proper +> path. + + $ wget https://raw.githubusercontent.com/Icinga/icinga2/master/tools/debug/gdb/gdbinit -O ~/.gdbinit + $ vim ~/.gdbinit + + +More details in the [troubleshooting debug documentation](https://docs.icinga.com/icinga2/latest/doc/module/icinga2/chapter/troubleshooting#debug). diff --git a/tools/debug/gdb/gdbinit b/tools/debug/gdb/gdbinit new file mode 100644 index 0000000..a7e6b87 --- /dev/null +++ b/tools/debug/gdb/gdbinit @@ -0,0 +1,25 @@ +set print pretty on + +python +import sys +sys.path.insert(0, '/home/gbeutner/icinga2/tools/debug/gdb') +from icingadbg import register_icinga_printers +register_icinga_printers() +end + +python +import sys +sys.path.insert(0, '/home/gbeutner/gdb_printers/python') +from libstdcxx.v6.printers import register_libstdcxx_printers +try: + register_libstdcxx_printers(None) +except: + pass +end + +python +import sys +sys.path.insert(0, '/home/gbeutner/Boost-Pretty-Printer') +from boost.printers import register_printer_gen +register_printer_gen(None) +end diff --git a/tools/debug/gdb/icingadbg.py b/tools/debug/gdb/icingadbg.py new file mode 100644 index 0000000..d1e1c59 --- /dev/null +++ b/tools/debug/gdb/icingadbg.py @@ -0,0 +1,64 @@ +import gdb +import re + +class IcingaStringPrinter: + def __init__(self, val): + self.val = val + + def to_string(self): + return '"' + self.val['m_Data']['_M_dataplus']['_M_p'].string() + '"' + +class IcingaValuePrinter: + def __init__(self, val): + self.val = val + + def to_string(self): + which = self.val['m_Value']['which_'] + + if which == 0: + return 'Empty' + elif which == 1: + return self.val['m_Value']['storage_']['data_']['buf'].cast(gdb.lookup_type('double').pointer()).dereference() + elif which == 2: + return self.val['m_Value']['storage_']['data_']['buf'].cast(gdb.lookup_type('bool').pointer()).dereference() + elif which == 3: + return self.val['m_Value']['storage_']['data_']['buf'].cast(gdb.lookup_type('icinga::String').pointer()).dereference() + elif which == 4: + return self.val['m_Value']['storage_']['data_']['buf'].cast(gdb.lookup_type('icinga::Object').pointer()).dereference() + else: + return '' + +class IcingaSignalPrinter: + def __init__(self, val): + self.val = val + + def to_string(self): + return '' + +class IcingaMutexPrinter: + def __init__(self, val): + self.val = val + + def to_string(self): + owner = self.val['__data']['__owner'] + + if owner == 0: + return '' + else: + return '' + +def lookup_icinga_type(val): + t = val.type.unqualified() + if str(t) == 'icinga::String': + return IcingaStringPrinter(val) + elif str(t) == 'icinga::Value': + return IcingaValuePrinter(val) + elif re.match('^boost::signals2::signal.*<.*>$', str(t)): + return IcingaSignalPrinter(val) + elif str(t) == 'pthread_mutex_t': + return IcingaMutexPrinter(val) + + return None + +def register_icinga_printers(): + gdb.pretty_printers.append(lookup_icinga_type) diff --git a/tools/debug/natvis/Visualizers/icinga2.natstepfilter b/tools/debug/natvis/Visualizers/icinga2.natstepfilter new file mode 100644 index 0000000..f53f002 --- /dev/null +++ b/tools/debug/natvis/Visualizers/icinga2.natstepfilter @@ -0,0 +1,9 @@ + + + icinga::String::.*NoStepInto + icinga::Value::.*NoStepInto + icinga::Array::.*NoStepInto + icinga::Dictionary::.*NoStepInto + icinga::Object::.*NoStepInto + icinga::ObjectImpl<.*NoStepInto + diff --git a/tools/debug/natvis/Visualizers/icinga2.natvis b/tools/debug/natvis/Visualizers/icinga2.natvis new file mode 100644 index 0000000..0ec4b78 --- /dev/null +++ b/tools/debug/natvis/Visualizers/icinga2.natvis @@ -0,0 +1,32 @@ + + + + {m_Data} + + + + Empty + {*(double *)m_Value.storage_.data_.buf} + {*(double *)m_Value.storage_.data_.buf} + {*(icinga::String *)m_Value.storage_.data_.buf} + {*(boost::intrusive_ptr<icinga::Object> *)m_Value.storage_.data_.buf} + + + + {m_Data} + + m_Data + + + + + {m_Data} + + m_Data + + + + + {m_Lock} + + diff --git a/tools/debug/natvis/[Content_Types].xml b/tools/debug/natvis/[Content_Types].xml new file mode 100644 index 0000000..b1c9cf9 --- /dev/null +++ b/tools/debug/natvis/[Content_Types].xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tools/debug/natvis/extension.vsixmanifest b/tools/debug/natvis/extension.vsixmanifest new file mode 100644 index 0000000..d870e89 --- /dev/null +++ b/tools/debug/natvis/extension.vsixmanifest @@ -0,0 +1,18 @@ + + + + Icinga 2 Debugger Visualizers for Visual Studio + Icinga 2 Debugger Visualizers + + + + + + + + + + + + + -- cgit v1.2.3