Skip to content

Improve crashlog #8865

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 19 commits into from
Jul 9, 2021
Merged

Improve crashlog #8865

merged 19 commits into from
Jul 9, 2021

Conversation

Al2Klimov
Copy link
Member

@Al2Klimov Al2Klimov self-assigned this Jul 2, 2021
@icinga-probot icinga-probot bot added this to the 2.12.5 milestone Jul 2, 2021
@icinga-probot icinga-probot bot added area/log Logging related consider backporting Should be considered for inclusion in a bugfix release enhancement New feature or request labels Jul 2, 2021
@Al2Klimov
Copy link
Member Author

Blocked by

@Al2Klimov Al2Klimov force-pushed the feature/improve-crashlog-212 branch 2 times, most recently from 0e874af to bf1c33c Compare July 5, 2021 14:20
@Al2Klimov Al2Klimov removed their assignment Jul 5, 2021
@Al2Klimov Al2Klimov requested a review from julianbrost July 5, 2021 14:31
@Al2Klimov Al2Klimov marked this pull request as ready for review July 6, 2021 08:25
@N-o-X N-o-X removed the consider backporting Should be considered for inclusion in a bugfix release label Jul 6, 2021
Copy link
Contributor

@julianbrost julianbrost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please rebase to remove commits not part of this PR so that GitHub doesn't show them as part of this PR.

@Al2Klimov Al2Klimov force-pushed the feature/improve-crashlog-212 branch from bf1c33c to e4d34de Compare July 6, 2021 13:54
@Al2Klimov Al2Klimov requested a review from julianbrost July 6, 2021 13:55
@Al2Klimov Al2Klimov force-pushed the feature/improve-crashlog-212 branch from e4d34de to 60b9afc Compare July 7, 2021 15:16
On Windows, the termination handler is executed for uncaught C++
exceptions unless a SEH unhandled exception filter is also set. In this
case, this filter has to explicitly chain the default filter to keep
this behavior.
This is more similar to the normal exception crashlog which also states
the problem and time at the beginning of the file.
Provides roughly the same functionality but works better on certain
platforms (especially Windows) and is less code to maintain.
By default, DiagnosticInformation uses the stack trace saved when the
exception was thrown, but this mechanism is not in use on Windows.
Gathering a stacktrace in the terminate handler serves as a fallback.
…n and document behavior

The logic for selecting the traces to print stays the same, but there
are fewer nested ifs now. This changes the format of the returned string
a bit by adding a heading for both traces.
Maybe this will save the next person who has to look at this code some
time. Please don't blame me for the implementation, I'm just trying to
reconstruct what it does.
Older versions of MSVC fail to rethrow an unhandled C++ exception (using
`throw;`) in the termination handler (`std::set_terminate`), however
Icinga relies on this behavior in its crash handler
(`Application::ExceptionHandler`).
This makes the format more similar to what the uncaught C++ and SEH
exception handlers write. Previously there was no indication in the
crash log that a SIGABRT happened.
Unfortunately, the symbol resolution of boost::stacktrace is broken on
FreeBSD, therefore fall back to using backtrace_symbols() to print the
stack trace saved by Boost.

Additionally, -D_GNU_SOURCE is required on FreeBSD for the
_Unwind_Backtrace function used by boost::stacktrace.
So far, the check that actually sets HAVE_LIBEXECINFO was executed after
it was already used to add dependencies.
Needed by `boost::stacktrace` for `_Unwind_Backtrace()`.
- Explicitly disable optimizations for MSVC
- Make stack_test_func_a bigger
@julianbrost julianbrost force-pushed the feature/improve-crashlog-212 branch from 60b9afc to 7bfe896 Compare July 8, 2021 12:53
@julianbrost
Copy link
Contributor

git rebase -i origin/support/2.12 to remove commits that are not actually part of this PR.

@julianbrost
Copy link
Contributor

Commit with additional test code: dd7eabe

Linux C++ Exception

Caught unhandled exception.
Current time: 2021-07-08 13:11:40 +0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Debian GNU/Linux
  Platform version: 10 (buster)
  Kernel: Linux
  Kernel version: 5.12.14-arch1-1
  Architecture: x86_64

Build information:
  Compiler: GNU 8.3.0
  Build host: 047695450aea
  OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

Application information:

General paths:
  Config directory: /etc/icinga2
  Data directory: /var/lib/icinga2
  Log directory: /var/log/icinga2
  Cache directory: /var/cache/icinga2
  Spool directory: /var/spool/icinga2
  Run directory: /run/icinga2

Old paths (deprecated):
  Installation root: /usr
  Sysconf directory: /etc
  Run directory (base): /run
  Local state directory: /var

Internal paths:
  Package data directory: /usr/share/icinga2
  State path: /var/lib/icinga2/icinga2.state
  Modified attributes path: /var/lib/icinga2/modified-attributes.conf
  Objects path: /var/cache/icinga2/icinga2.debug
  Vars path: /var/cache/icinga2/icinga2.vars
  PID path: /run/icinga2/icinga2.pid

Error: test exception

Stacktrace:
 0# __cxa_throw in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 1# 0x000055AF75C640DC in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 2# 0x000055AF75F218CE in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 3# icinga::DaemonCommand::Run(boost::program_options::variables_map const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 4# 0x000055AF75CEDC5E in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 5# main in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 6# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
 7# _start in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***
Failed to launch GDB: No such file or directory

Linux SIGABRT

Caught SIGABRT.
Current time: 2021-07-08 13:11:49 +0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Debian GNU/Linux
  Platform version: 10 (buster)
  Kernel: Linux
  Kernel version: 5.12.14-arch1-1
  Architecture: x86_64

Build information:
  Compiler: GNU 8.3.0
  Build host: 047695450aea
  OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

Application information:

General paths:
  Config directory: /etc/icinga2
  Data directory: /var/lib/icinga2
  Log directory: /var/log/icinga2
  Cache directory: /var/cache/icinga2
  Spool directory: /var/spool/icinga2
  Run directory: /run/icinga2

Old paths (deprecated):
  Installation root: /usr
  Sysconf directory: /etc
  Run directory (base): /run
  Local state directory: /var

Internal paths:
  Package data directory: /usr/share/icinga2
  State path: /var/lib/icinga2/icinga2.state
  Modified attributes path: /var/lib/icinga2/modified-attributes.conf
  Objects path: /var/cache/icinga2/icinga2.debug
  Vars path: /var/cache/icinga2/icinga2.vars
  PID path: /run/icinga2/icinga2.pid

Stacktrace:
 0# icinga::Application::SigAbrtHandler(int) in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 1# 0x00007FC436F54730 in /lib/x86_64-linux-gnu/libpthread.so.0
 2# gsignal in /lib/x86_64-linux-gnu/libc.so.6
 3# abort in /lib/x86_64-linux-gnu/libc.so.6
 4# 0x000056207736711E in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 5# 0x00005620776248CE in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 6# icinga::DaemonCommand::Run(boost::program_options::variables_map const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 7# 0x00005620773F0C5E in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 8# main in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2
 9# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
10# _start in /usr/lib/x86_64-linux-gnu/icinga2/sbin/icinga2

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***

Failed to launch GDB: No such file or directory

Windows x86-64 SEH

Caught unhandled SEH exception.
Current time: 2021-07-08 13:17:03 -0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Windows
  Platform version: 8
  Kernel: Windows
  Kernel version: 6.2
  Architecture: x86_64

Build information:
  Compiler: MSVC 19.29.30038.1
  Build host: WINBUILD2
  OpenSSL version: OpenSSL 1.1.1k  25 Mar 2021

Application information:

General paths:
  Config directory: C:\ProgramData\icinga2\etc\icinga2
  Data directory: C:\ProgramData\icinga2\var\lib\icinga2
  Log directory: C:\ProgramData\icinga2\var\log\icinga2
  Cache directory: C:\ProgramData\icinga2\var\cache\icinga2
  Spool directory: C:\ProgramData\icinga2\var\spool\icinga2
  Run directory: C:\ProgramData\icinga2\var\run\icinga2

Old paths (deprecated):
  Installation root: C:\Program Files\ICINGA2\
  Sysconf directory: C:\ProgramData\icinga2\etc
  Run directory (base): C:\ProgramData\icinga2\var\run
  Local state directory: C:\ProgramData\icinga2\var

Internal paths:
  Package data directory: C:\Program Files\ICINGA2\\share\icinga2
  State path: C:\ProgramData\icinga2\var\lib\icinga2/icinga2.state
  Modified attributes path: C:\ProgramData\icinga2\var\lib\icinga2/modified-attributes.conf
  Objects path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.debug
  Vars path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.vars
  PID path: C:\ProgramData\icinga2\var\run\icinga2/icinga2.pid

SEH exception:
  Code: 0x2a
  Address: 00007FFE1E015299
  Flags: 0

Stacktrace:
 0# 0x00007FF798017B55 in icinga2
 1# 0x00007FF797FD3E4F in icinga2
 2# UnhandledExceptionFilter in KERNELBASE
 3# memset in ntdll
 4# _C_specific_handler in ntdll
 5# _chkstk in ntdll
 6# RtlWalkFrameChain in ntdll
 7# RtlRaiseException in ntdll
 8# RaiseException in KERNELBASE
 9# 0x00007FF79822378F in icinga2
10# 0x00007FF79820DBCE in icinga2
11# 0x00007FF7981EDFBF in icinga2
12# 0x00007FF797EE233E in icinga2
13# 0x00007FF797EEBD81 in icinga2
14# 0x00007FF798504C38 in icinga2
15# BaseThreadInitThunk in KERNEL32
16# RtlUserThreadStart in ntdll

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***

Windows x86-64 C++ Exception

Caught unhandled exception.
Current time: 2021-07-08 13:17:14 -0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Windows
  Platform version: 8
  Kernel: Windows
  Kernel version: 6.2
  Architecture: x86_64

Build information:
  Compiler: MSVC 19.29.30038.1
  Build host: WINBUILD2
  OpenSSL version: OpenSSL 1.1.1k  25 Mar 2021

Application information:

General paths:
  Config directory: C:\ProgramData\icinga2\etc\icinga2
  Data directory: C:\ProgramData\icinga2\var\lib\icinga2
  Log directory: C:\ProgramData\icinga2\var\log\icinga2
  Cache directory: C:\ProgramData\icinga2\var\cache\icinga2
  Spool directory: C:\ProgramData\icinga2\var\spool\icinga2
  Run directory: C:\ProgramData\icinga2\var\run\icinga2

Old paths (deprecated):
  Installation root: C:\Program Files\ICINGA2\
  Sysconf directory: C:\ProgramData\icinga2\etc
  Run directory (base): C:\ProgramData\icinga2\var\run
  Local state directory: C:\ProgramData\icinga2\var

Internal paths:
  Package data directory: C:\Program Files\ICINGA2\\share\icinga2
  State path: C:\ProgramData\icinga2\var\lib\icinga2/icinga2.state
  Modified attributes path: C:\ProgramData\icinga2\var\lib\icinga2/modified-attributes.conf
  Objects path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.debug
  Vars path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.vars
  PID path: C:\ProgramData\icinga2\var\run\icinga2/icinga2.pid

Error: test exception

Stacktrace:
 0# 0x00007FF798017B55 in icinga2
 1# 0x00007FF798536AFE in icinga2
 2# 0x00007FFE17921080 in VCRUNTIME140_1
 3# _NLG_Return2 in VCRUNTIME140_1
 4# RtlCaptureContext in ntdll
 5# 0x00007FF797FA1041 in icinga2
 6# terminate in ucrtbase
 7# 0x00007FF79850555A in icinga2
 8# 0x00007FF797FD3B44 in icinga2
 9# UnhandledExceptionFilter in KERNELBASE
10# memset in ntdll
11# _C_specific_handler in ntdll
12# _chkstk in ntdll
13# RtlWalkFrameChain in ntdll
14# RtlRaiseException in ntdll
15# RaiseException in KERNELBASE
16# _NLG_Return2 in VCRUNTIME140_1
17# RtlCaptureContext in ntdll
18# 0x00007FF7981EDFBF in icinga2
19# 0x00007FF797EE233E in icinga2
20# 0x00007FF797EEBD81 in icinga2
21# 0x00007FF798504C38 in icinga2
22# BaseThreadInitThunk in KERNEL32
23# RtlUserThreadStart in ntdll

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***

Windows x86 SEH

Caught unhandled SEH exception.
Current time: 2021-07-08 13:18:10 -0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Windows
  Platform version: 8
  Kernel: Windows
  Kernel version: 6.2
  Architecture: x86_64

Build information:
  Compiler: MSVC 19.29.30038.1
  Build host: WINBUILD2
  OpenSSL version: OpenSSL 1.1.1k  25 Mar 2021

Application information:

General paths:
  Config directory: C:\ProgramData\icinga2\etc\icinga2
  Data directory: C:\ProgramData\icinga2\var\lib\icinga2
  Log directory: C:\ProgramData\icinga2\var\log\icinga2
  Cache directory: C:\ProgramData\icinga2\var\cache\icinga2
  Spool directory: C:\ProgramData\icinga2\var\spool\icinga2
  Run directory: C:\ProgramData\icinga2\var\run\icinga2

Old paths (deprecated):
  Installation root: C:\Program Files (x86)\ICINGA2\
  Sysconf directory: C:\ProgramData\icinga2\etc
  Run directory (base): C:\ProgramData\icinga2\var\run
  Local state directory: C:\ProgramData\icinga2\var

Internal paths:
  Package data directory: C:\Program Files (x86)\ICINGA2\\share\icinga2
  State path: C:\ProgramData\icinga2\var\lib\icinga2/icinga2.state
  Modified attributes path: C:\ProgramData\icinga2\var\lib\icinga2/modified-attributes.conf
  Objects path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.debug
  Vars path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.vars
  PID path: C:\ProgramData\icinga2\var\run\icinga2/icinga2.pid

SEH exception:
  Code: 0x2a
  Address: 777FAAF2
  Flags: 0

Stacktrace:
 0# 0x00DCB35F in icinga2
 1# 0x00D8B272 in icinga2
 2# UnhandledExceptionFilter in KERNELBASE
 3# RtlCaptureStackContext in ntdll
 4# RtlGetAppContainerNamedObjectPath in ntdll

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***

Windows x86 C++ Exception

Caught unhandled exception.
Current time: 2021-07-08 13:18:21 -0000

  Application version: v2.12.4-50-gdd7eabeb0

System information:
  Platform: Windows
  Platform version: 8
  Kernel: Windows
  Kernel version: 6.2
  Architecture: x86_64

Build information:
  Compiler: MSVC 19.29.30038.1
  Build host: WINBUILD2
  OpenSSL version: OpenSSL 1.1.1k  25 Mar 2021

Application information:

General paths:
  Config directory: C:\ProgramData\icinga2\etc\icinga2
  Data directory: C:\ProgramData\icinga2\var\lib\icinga2
  Log directory: C:\ProgramData\icinga2\var\log\icinga2
  Cache directory: C:\ProgramData\icinga2\var\cache\icinga2
  Spool directory: C:\ProgramData\icinga2\var\spool\icinga2
  Run directory: C:\ProgramData\icinga2\var\run\icinga2

Old paths (deprecated):
  Installation root: C:\Program Files (x86)\ICINGA2\
  Sysconf directory: C:\ProgramData\icinga2\etc
  Run directory (base): C:\ProgramData\icinga2\var\run
  Local state directory: C:\ProgramData\icinga2\var

Internal paths:
  Package data directory: C:\Program Files (x86)\ICINGA2\\share\icinga2
  State path: C:\ProgramData\icinga2\var\lib\icinga2/icinga2.state
  Modified attributes path: C:\ProgramData\icinga2\var\lib\icinga2/modified-attributes.conf
  Objects path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.debug
  Vars path: C:\ProgramData\icinga2\var\cache\icinga2/icinga2.vars
  PID path: C:\ProgramData\icinga2\var\run\icinga2/icinga2.pid

Error: test exception

Stacktrace:
 0# 0x00DCB35F in icinga2
 1# 0x00D5A329 in icinga2
 2# terminate in ucrtbase
 3# 0x0128E24C in icinga2
 4# 0x00D8AF72 in icinga2
 5# UnhandledExceptionFilter in KERNELBASE
 6# RtlCaptureStackContext in ntdll
 7# RtlGetAppContainerNamedObjectPath in ntdll

***
* This would indicate a runtime problem or configuration error. If you believe this is a bug in Icinga 2
* please submit a bug report at https://github.com/Icinga/icinga2 and include this stack trace as well as any other
* information that might be useful in order to reproduce this problem.
***

@julianbrost julianbrost mentioned this pull request Jul 8, 2021
@julianbrost julianbrost merged commit 289a872 into support/2.12 Jul 9, 2021
@icinga-probot icinga-probot bot deleted the feature/improve-crashlog-212 branch July 9, 2021 06:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/log Logging related enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants