journalexception.cpp
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #include "journalstackwalker.h"
66 #include "journalexception.h"
67 
70 {
71 public:
73  : StackWalker()
74  , m_exception(exc)
75  {}
76 
78 
79  virtual void OnOutput(LPCSTR szText)
80  {
81  m_exception->m_stack += szText;
82  m_exception->m_stack += "\n";
83  }
84 };
85 
91 JournalException::JournalException(std::string const& message)
92  : XsException(XRV_ERROR, message)
93  , m_stack("************ Dump Begin ************\n")
94 {
96  sw.ShowCallstack();
97  m_stack += "************* Dump End *************";
98 }
99 
101 const char* JournalException::msg() const
102 {
103  return what();
104 }
105 
107 const std::string& JournalException::stack() const
108 {
109  return m_stack;
110 }
111 
112 #ifdef XSENS_DEBUG
113  #define GOTODEBDEF true
114 #else
115  #define GOTODEBDEF false
116 #endif
117 
122 
123 #ifdef XSENS_WINDOWS
124 
130 LONG journallerExceptionFilter(EXCEPTION_POINTERS* pExPtrs, Journaller* journal)
131 {
132  journal->log(JLL_Fatal, "******* C level exception (CRASH) *******");
133  journal->log(JLL_Fatal, "************ Dump Begin ************");
134  JournalStackWalker sw(journal);
135  sw.ShowCallstack(GetCurrentThread(), pExPtrs->ContextRecord);
136  journal->log(JLL_Fatal, "************* Dump End *************");
137 
138  return gOnExceptionGotoDebugger ? EXCEPTION_CONTINUE_SEARCH : EXCEPTION_EXECUTE_HANDLER;
139 }
140 #endif
StackWalker::ShowCallstack
BOOL ShowCallstack(HANDLE hThread=GetCurrentThread(), const CONTEXT *context=NULL, PReadProcessMemoryRoutine readMemoryFunction=NULL, LPVOID pUserData=NULL)
Definition: stackwalker.cpp:981
JournalExceptionStackWalker
A helper class that combines the StackWalker output into a std::string.
Definition: journalexception.cpp:69
JournalException::JournalException
JournalException(std::string const &message)
Constructor, copies the message and creates a stack dump.
Definition: journalexception.cpp:91
JournalExceptionStackWalker::JournalExceptionStackWalker
JournalExceptionStackWalker(JournalException *exc)
Definition: journalexception.cpp:72
journalstackwalker.h
XRV_ERROR
@ XRV_ERROR
256: A generic error occurred
Definition: xsresultvalue.h:126
Journaller
A journalling class for debugging applications.
Definition: journaller.h:79
JLL_Fatal
@ JLL_Fatal
only log fatal messages
Definition: journalloglevel.h:94
JournalException
An exception class that automatically includes stack dump information.
Definition: journalexception.h:78
JournalException::stack
const std::string & stack() const
The stack dump as it was at the time of object construction.
Definition: journalexception.cpp:107
JournalException::msg
const char * msg() const
The message as supplied to the constructor.
Definition: journalexception.cpp:101
journalexception.h
JournalException::m_stack
std::string m_stack
A string that contains a stack dump.
Definition: journalexception.h:88
Journaller::log
void log(JournalLogLevel level, const std::string &msg)
Write a log message to the file if level is at least equal to the current log level.
Definition: journaller.cpp:201
gOnExceptionGotoDebugger
bool gOnExceptionGotoDebugger
Definition: journalexception.cpp:121
StackWalker
A class that can help with walking the stack for debugging purposes (Windows version)
Definition: stackwalker.h:98
GOTODEBDEF
#define GOTODEBDEF
Definition: journalexception.cpp:115
JournalExceptionStackWalker::m_exception
JournalException * m_exception
Definition: journalexception.cpp:77
JournalExceptionStackWalker::OnOutput
virtual void OnOutput(LPCSTR szText)
Definition: journalexception.cpp:79
LPCSTR
const typedef std::string & LPCSTR
Definition: stackwalker_linux.h:70
JournalStackWalker
A journaller class that is used for walking the stack.
Definition: journalstackwalker.h:78


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20