mirror of
https://github.com/NixOS/nix.git
synced 2025-12-07 09:31:01 +01:00
libutil: Print stack trace on assertion failure
This change overrides __assert_fail on glibc/musl to instead call std::terminate that we have a custom handler for. This ensures that we have more context to diagnose issues encountered by users in the wild.
This commit is contained in:
parent
2308aaf192
commit
46382ade74
3 changed files with 51 additions and 0 deletions
|
|
@ -0,0 +1,17 @@
|
|||
#include "nix/util/error.hh"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cinttypes>
|
||||
#include <string_view>
|
||||
|
||||
extern "C" [[noreturn]] void __attribute__((weak))
|
||||
__wrap___assert_fail(const char * assertion, const char * file, unsigned int line, const char * function)
|
||||
{
|
||||
char buf[512];
|
||||
int n =
|
||||
snprintf(buf, sizeof(buf), "Assertion '%s' failed in %s at %s:%" PRIuLEAST32, assertion, function, file, line);
|
||||
if (n < 0)
|
||||
nix::panic("Assertion failed and could not format error message");
|
||||
nix::panic(std::string_view(buf, std::min(static_cast<int>(sizeof(buf)), n)));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue