|
@@ -133,7 +133,7 @@ static void ggml_print_backtrace_symbols(void) {
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
-static void ggml_print_backtrace(void) {
|
|
|
|
|
|
|
+void ggml_print_backtrace(void) {
|
|
|
const char * GGML_NO_BACKTRACE = getenv("GGML_NO_BACKTRACE");
|
|
const char * GGML_NO_BACKTRACE = getenv("GGML_NO_BACKTRACE");
|
|
|
if (GGML_NO_BACKTRACE) {
|
|
if (GGML_NO_BACKTRACE) {
|
|
|
return;
|
|
return;
|
|
@@ -160,6 +160,10 @@ static void ggml_print_backtrace(void) {
|
|
|
const int parent_pid = getpid();
|
|
const int parent_pid = getpid();
|
|
|
const int child_pid = fork();
|
|
const int child_pid = fork();
|
|
|
if (child_pid < 0) { // error
|
|
if (child_pid < 0) { // error
|
|
|
|
|
+#if defined(__linux__)
|
|
|
|
|
+ close(lock[1]);
|
|
|
|
|
+ close(lock[0]);
|
|
|
|
|
+#endif
|
|
|
return;
|
|
return;
|
|
|
} else if (child_pid == 0) { // child
|
|
} else if (child_pid == 0) { // child
|
|
|
char attach[32];
|
|
char attach[32];
|
|
@@ -167,6 +171,7 @@ static void ggml_print_backtrace(void) {
|
|
|
#if defined(__linux__)
|
|
#if defined(__linux__)
|
|
|
close(lock[1]);
|
|
close(lock[1]);
|
|
|
(void) !read(lock[0], lock, 1);
|
|
(void) !read(lock[0], lock, 1);
|
|
|
|
|
+ close(lock[0]);
|
|
|
#endif
|
|
#endif
|
|
|
// try gdb
|
|
// try gdb
|
|
|
execlp("gdb", "gdb", "--batch",
|
|
execlp("gdb", "gdb", "--batch",
|
|
@@ -216,6 +221,8 @@ void ggml_abort(const char * file, int line, const char * fmt, ...) {
|
|
|
abort();
|
|
abort();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// ggml_print_backtrace is registered with std::set_terminate by ggml.cpp
|
|
|
|
|
+
|
|
|
//
|
|
//
|
|
|
// logging
|
|
// logging
|
|
|
//
|
|
//
|