annotate Sphinx/source/faq/crash.rst @ 1096:c825cf4672f2

quick start guide for windows
author Alain Mazy <am@orthanc.team>
date Thu, 01 Aug 2024 13:24:18 +0200
parents b7835da59750
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 .. _crash:
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 Crash analysis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 ==============
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
244
26b0d7ece4af debugging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 241
diff changeset
6 Orthanc crashes very rarely. You are most likely looking for the FAQ
26b0d7ece4af debugging
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 241
diff changeset
7 entry about :ref:`debugging Orthanc <debugging>`.
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 .. _segfault-plugin:
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 Generating a segmentation fault for test purpose
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 ------------------------------------------------
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 .. highlight:: cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 Here is the source code of a minimal C++ :ref:`plugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 <creating-plugins>` that can be used to simulate a segmentation fault
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 within Orthanc::
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 #include <orthanc/OrthancCPlugin.h>
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23 extern "C"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 int32_t OrthancPluginInitialize(OrthancPluginContext* context)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 // Let's trigger a segmentation fault by writing to NULL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 intptr_t *p = NULL;
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29 *p = 42;
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 return OrthancPluginErrorCode_Success;
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 void OrthancPluginFinalize()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 const char* OrthancPluginGetName()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 return "crash";
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 const char* OrthancPluginGetVersion()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 {
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 return "0.0";
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 As soon as Orthanc will try and load this plugin, it will crash. This
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 gives you the opportunity to learn how to debug Orthanc on your very
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 specific platform.
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 GNU/Linux system using gdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 --------------------------
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 .. highlight:: bash
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
58 The Orthanc project provides precompiled binaries with debug symbols
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
59 for the mainline that can run on almost any recent GNU/Linux system
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
60 (generated thanks to the `LSB - Linux Standard Base SDK
241
f277d18e8d71 link to debug plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 240
diff changeset
61 <https://en.wikipedia.org/wiki/Linux_Standard_Base>`__). This allows
f277d18e8d71 link to debug plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 240
diff changeset
62 to generate a backtrace (the famous "core dumped" message) that can be
f277d18e8d71 link to debug plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 240
diff changeset
63 analyzed by any developer of Orthanc. Assuming that the :ref:`plugin
f277d18e8d71 link to debug plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 240
diff changeset
64 above <segfault-plugin>` is available as the ``crash.cpp`` file, here
f277d18e8d71 link to debug plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 240
diff changeset
65 is a sample debug session::
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
67 $ wget https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/Orthanc
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 $ chmod +x ./Orthanc
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
69 $ g++ -fPIC -shared ./crash.cpp -I ~/orthanc/OrthancServer/Plugins/Include -o crash.so
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 $ ulimit -c unlimited
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
71 $ echo '{ "Plugins" : ["./crash.so"] }' > Configuration.json
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 $ rm -f core ; ./Orthanc Configuration.json
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
73 W0103 18:05:01.661466 MAIN main.cpp:2041] Orthanc version: mainline (20240103T170440)
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
74 W0103 18:05:01.661583 MAIN main.cpp:1775] Performance warning: Non-release build, runtime debug assertions are turned on
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
75 W0103 18:05:01.661800 MAIN OrthancConfiguration.cpp:57] Reading the configuration from: "Configuration.json"
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
76 W0103 18:05:01.864783 MAIN main.cpp:912] Loading plugin(s) from: ./crash.so
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
77 W0103 18:05:01.864883 MAIN PluginsManager.cpp:261] Registering plugin 'crash' (version 0.0)
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78 Segmentation fault (core dumped)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 .. highlight:: text
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83 This session creates a file called ``core`` in the current working
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
84 directory. If you don't see this file, it probably means that your
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
85 GNU/Linux distribution customizes the name of core files (this is for
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
86 instance the case of Ubuntu 22.04 that sends core files to
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
87 ``apport``). You can temporarily disable this behavior by typing::
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
89 $ echo core | sudo tee /proc/sys/kernel/core_pattern
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
90
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
91
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
92 You can then analyze the ``core`` file by running ``gdb`` as follows::
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
93
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
94 $ gdb -c ./core.424217 ./Orthanc
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 (gdb) bt
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
96 #0 0x00007f5943308111 in OrthancPluginInitialize () from ./crash.so
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
97 #1 0x00000000005e1cbc in Orthanc::CallInitialize (plugin=..., context=...)
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
98 at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Plugins/Engine/PluginsManager.cpp:87
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
99 #2 0x00000000005e2f14 in Orthanc::PluginsManager::RegisterPlugin (this=0x2edc220, path="./crash.so")
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
100 at /home/jodogne/BuildBotWorker/Orthanc_mainline_-_LSB_Debug/build/OrthancServer/Plugins/Engine/PluginsManager.cpp:264
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 If you are unable to analyze such a backtrace by yourself, feel free
984
46e2941b57dd replace link to google users group by link to discourse
Alain Mazy <am@osimis.io>
parents: 963
diff changeset
103 to post your ``core`` file on the `Orthanc Users discussion forum
1009
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
104 <https://discourse.orthanc-server.org>`__. Do not forget to indicate
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
105 the content of
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
106 `<https://orthanc.uclouvain.be/downloads/linux-standard-base/orthanc/mainline-debug/revision.txt>`__
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
107 so that we can find the version of Orthanc that generated the core
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
108 file.
b7835da59750 updated instructions for gdb/cgdb
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1000
diff changeset
109
239
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 **Important:** The Orthanc developers will only be able to analyze the
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 ``core`` files generated by our own precompiled binaries!