Mercurial > hg > orthanc-book
changeset 1009:b7835da59750
updated instructions for gdb/cgdb
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 03 Jan 2024 18:42:52 +0100 |
parents | 23a54088d604 |
children | 84032b16e616 |
files | Sphinx/source/faq/crash.rst Sphinx/source/faq/debugging.rst |
diffstat | 2 files changed, 79 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/Sphinx/source/faq/crash.rst Wed Jan 03 17:56:00 2024 +0100 +++ b/Sphinx/source/faq/crash.rst Wed Jan 03 18:42:52 2024 +0100 @@ -55,52 +55,58 @@ .. highlight:: bash -The Orthanc project provides precompiled debug binaries that can be -run on almost any recent GNU/Linux system (generated thanks to the -`LSB - Linux Standard Base SDK +The Orthanc project provides precompiled binaries with debug symbols +for the mainline that can run on almost any recent GNU/Linux system +(generated thanks to the `LSB - Linux Standard Base SDK <https://en.wikipedia.org/wiki/Linux_Standard_Base>`__). This allows to generate a backtrace (the famous "core dumped" message) that can be analyzed by any developer of Orthanc. Assuming that the :ref:`plugin above <segfault-plugin>` is available as the ``crash.cpp`` file, here is a sample debug session:: - $ wget https://lsb.orthanc-server.com/orthanc/debug/1.12.2/Orthanc + $ wget https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/Orthanc $ chmod +x ./Orthanc - $ gcc -fPIC -shared ./crash.cpp -I ~/orthanc/Plugins/Include -o crash.so + $ g++ -fPIC -shared ./crash.cpp -I ~/orthanc/OrthancServer/Plugins/Include -o crash.so $ ulimit -c unlimited - $ echo '{ "Plugins" : ["crash.so"] }' > Configuration.json + $ echo '{ "Plugins" : ["./crash.so"] }' > Configuration.json $ rm -f core ; ./Orthanc Configuration.json - W0427 15:43:24.215783 main.cpp:1436] Orthanc version: 1.12.2 - W0427 15:43:24.215910 main.cpp:1279] Performance warning: Non-release build, runtime debug assertions are turned on - W0427 15:43:24.217585 OrthancConfiguration.cpp:61] Reading the configuration from: "Configuration.json" - W0427 15:43:24.254733 main.cpp:700] Loading plugin(s) from: crash.so - W0427 15:43:24.254866 PluginsManager.cpp:269] Registering plugin 'crash' (version 0.0) + W0103 18:05:01.661466 MAIN main.cpp:2041] Orthanc version: mainline (20240103T170440) + W0103 18:05:01.661583 MAIN main.cpp:1775] Performance warning: Non-release build, runtime debug assertions are turned on + W0103 18:05:01.661800 MAIN OrthancConfiguration.cpp:57] Reading the configuration from: "Configuration.json" + W0103 18:05:01.864783 MAIN main.cpp:912] Loading plugin(s) from: ./crash.so + W0103 18:05:01.864883 MAIN PluginsManager.cpp:261] Registering plugin 'crash' (version 0.0) Segmentation fault (core dumped) .. highlight:: text This session creates a file called ``core`` in the current working -directory. You can analyze it by running ``gdb`` as follows:: +directory. If you don't see this file, it probably means that your +GNU/Linux distribution customizes the name of core files (this is for +instance the case of Ubuntu 22.04 that sends core files to +``apport``). You can temporarily disable this behavior by typing:: - $ gdb -c ./core ./Orthanc + $ echo core | sudo tee /proc/sys/kernel/core_pattern + + +You can then analyze the ``core`` file by running ``gdb`` as follows:: + + $ gdb -c ./core.424217 ./Orthanc (gdb) bt - #0 0x00007f7b1aa3d739 in OrthancPluginInitialize () from crash.so - #1 0x00000000008632f0 in Orthanc::CallInitialize (plugin=..., context=...) - at /home/jodogne/BuildBotWorker/Orthanc_1_5_6_-_LSB_Debug/build/Plugins/Engine/PluginsManager.cpp:98 - #2 0x0000000000864496 in Orthanc::PluginsManager::RegisterPlugin (this=0x4314f90, path="crash.so") - at /home/jodogne/BuildBotWorker/Orthanc_1_5_6_-_LSB_Debug/build/Plugins/Engine/PluginsManager.cpp:272 - ... + #0 0x00007f5943308111 in OrthancPluginInitialize () from ./crash.so + #1 0x00000000005e1cbc in Orthanc::CallInitialize (plugin=..., context=...) + at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Plugins/Engine/PluginsManager.cpp:87 + #2 0x00000000005e2f14 in Orthanc::PluginsManager::RegisterPlugin (this=0x2edc220, path="./crash.so") + at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Plugins/Engine/PluginsManager.cpp:264 If you are unable to analyze such a backtrace by yourself, feel free to post your ``core`` file on the `Orthanc Users discussion forum -<https://discourse.orthanc-server.org>`__. +<https://discourse.orthanc-server.org>`__. Do not forget to indicate +the content of +`<https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/revision.txt>`__ +so that we can find the version of Orthanc that generated the core +file. + **Important:** The Orthanc developers will only be able to analyze the ``core`` files generated by our own precompiled binaries! - - -Docker ------- - -To be written.
--- a/Sphinx/source/faq/debugging.rst Wed Jan 03 17:56:00 2024 +0100 +++ b/Sphinx/source/faq/debugging.rst Wed Jan 03 18:42:52 2024 +0100 @@ -30,7 +30,7 @@ setting ``-DCMAKE_BUILD_TYPE=Debug`` when invoking CMake. Then, learn how to use the debugger that is best suited to your -platform (e.g. Microsoft Visual Studio, gdb or Xcode). +platform (e.g. Microsoft Visual Studio, gdb, cgdb, or Xcode). GNU/Linux system using gdb @@ -38,45 +38,65 @@ .. highlight:: bash -The Orthanc project provides precompiled debug binaries that can be -run on almost any recent GNU/Linux system (generated thanks to the -`LSB - Linux Standard Base SDK +The Orthanc project provides precompiled binaries with debug symbols +for the mainline that can run on almost any recent GNU/Linux system +(generated thanks to the `LSB - Linux Standard Base SDK <https://en.wikipedia.org/wiki/Linux_Standard_Base>`__). This allows to debug Orthanc without compiling from sources. Here is a sample -debug session:: +debug session to analyze an error that comes from an invalid +:ref:`configuration file <configuration>`:: - $ wget https://lsb.orthanc-server.com/orthanc/debug/1.12.2/Orthanc + $ wget https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/Orthanc + $ echo 'nope' > invalid.json $ chmod +x ./Orthanc - $ gdb ./Orthanc Configuration.json + $ gdb --args ./Orthanc invalid.json (gdb) catch throw Catchpoint 1 (throw) (gdb) run - W0513 15:24:42.374349 main.cpp:1436] Orthanc version: 1.12.2 - ---> Reproduce your error case <--- - Thread 15 "Orthanc" hit Catchpoint 1 (exception thrown), 0x00007ffff6de68bd in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 + Starting program: /tmp/i/Orthanc invalid.json + [Thread debugging using libthread_db enabled] + Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + W0103 18:25:01.540600 MAIN main.cpp:2041] Orthanc version: mainline (20240103T170440) + W0103 18:25:01.540636 MAIN main.cpp:1775] Performance warning: Non-release build, runtime debug assertions are turned on + W0103 18:25:01.540702 MAIN OrthancConfiguration.cpp:57] Reading the configuration from: "invalid.json" + E0103 18:25:01.540823 MAIN OrthancException.cpp:61] Cannot parse a JSON document: The configuration file does not follow the JSON syntax: invalid.json + + Catchpoint 1 (exception thrown), 0x00007ffff7cae4a1 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6 (gdb) backtrace - #0 0x00007ffff6de68bd in __cxa_throw () - from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 - ... + #0 0x00007ffff7cae4a1 in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6 + #1 0x0000000000473745 in Orthanc::AddFileToConfiguration (target=..., path=...) + at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Sources/OrthancConfiguration.cpp:72 + #2 0x0000000000473e98 in Orthanc::ReadConfiguration (target=..., configurationFile=0x7fffffffe302 "invalid.json") + at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Sources/OrthancConfiguration.cpp:149 + [...] If you are unable to analyze such a backtrace by yourself, feel free to post your backtrace on the `Orthanc Users discussion forum -<https://discourse.orthanc-server.org>`__. +<https://discourse.orthanc-server.org>`__. Do not forget to indicate +the content of +`<https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/revision.txt>`__ +so that we can find the version of Orthanc that generated the core +file. -**Plugins:** Besides the Orthanc core, debug binaries of the official -plugins precompiled using the LSB are also available at the following -locations: +If you want to read the source code of the backtrace, it is highly +suggested to use ``cgdb`` with its ``set substitute-path`` command. +First read the content of the `revision.txt file +<https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/revision.txt>`__ +to identify the revision of Orthanc. Then, you can type:: -* `Orthanc core <https://lsb.orthanc-server.com/orthanc/debug/>`__ -* `DICOMweb plugin <https://lsb.orthanc-server.com/plugin-dicom-web/debug/>`__ -* `MySQL plugin <https://lsb.orthanc-server.com/plugin-mysql/debug/>`__ -* `Orthanc Web viewer <https://lsb.orthanc-server.com/plugin-webviewer/debug/>`__ -* `PostgreSQL plugin <https://lsb.orthanc-server.com/plugin-postgresql/debug/>`__ -* `Transfers accelerator plugin <https://lsb.orthanc-server.com/plugin-transfers/debug/>`__ -* `Whole-slide imaging <https://lsb.orthanc-server.com/whole-slide-imaging/debug/>`__ + $ hg clone -r 723251b2b71e https://orthanc.uclouvain.be/hg/orthanc/ + $ cgdb --args ./Orthanc invalid.json + (gdb) set substitute-path /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/ ./orthanc/ + (gdb) catch throw + (gdb) run + (gdb) frame 2 + +Plugins +....... -Docker ------- +Besides the Orthanc core, debug LSB binaries are also available for +most official plugins at the following location: +`<https://orthanc.uclouvain.be/downloads/linux-standard-base/index.html>`__ -To be written. +These binaries are identified as ``mainline-debug/``.