Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/crash.rst @ 1113:a588960a72e5 default tip
spelling
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Mon, 28 Oct 2024 09:23:08 +0100 |
parents | b7835da59750 |
children |
rev | line source |
---|---|
239 | 1 .. _crash: |
2 | |
3 Crash analysis | |
4 ============== | |
5 | |
244 | 6 Orthanc crashes very rarely. You are most likely looking for the FAQ |
7 entry about :ref:`debugging Orthanc <debugging>`. | |
239 | 8 |
9 | |
10 .. _segfault-plugin: | |
11 | |
12 Generating a segmentation fault for test purpose | |
13 ------------------------------------------------ | |
14 | |
15 .. highlight:: cpp | |
16 | |
17 Here is the source code of a minimal C++ :ref:`plugin | |
18 <creating-plugins>` that can be used to simulate a segmentation fault | |
19 within Orthanc:: | |
20 | |
21 #include <orthanc/OrthancCPlugin.h> | |
22 | |
23 extern "C" | |
24 { | |
25 int32_t OrthancPluginInitialize(OrthancPluginContext* context) | |
26 { | |
27 // Let's trigger a segmentation fault by writing to NULL | |
28 intptr_t *p = NULL; | |
29 *p = 42; | |
30 return OrthancPluginErrorCode_Success; | |
31 } | |
32 | |
33 void OrthancPluginFinalize() | |
34 { | |
35 } | |
36 | |
37 const char* OrthancPluginGetName() | |
38 { | |
39 return "crash"; | |
40 } | |
41 | |
42 const char* OrthancPluginGetVersion() | |
43 { | |
44 return "0.0"; | |
45 } | |
46 } | |
47 | |
48 As soon as Orthanc will try and load this plugin, it will crash. This | |
49 gives you the opportunity to learn how to debug Orthanc on your very | |
50 specific platform. | |
51 | |
52 | |
53 GNU/Linux system using gdb | |
54 -------------------------- | |
55 | |
56 .. highlight:: bash | |
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 | 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 | 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 | 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 | 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 | 78 Segmentation fault (core dumped) |
79 | |
80 | |
81 .. highlight:: text | |
82 | |
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 | 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 | 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 | 101 |
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 | 110 |
111 **Important:** The Orthanc developers will only be able to analyze the | |
112 ``core`` files generated by our own precompiled binaries! |