[gtk/matthiasc/for-master] reftest: get backtraces
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master] reftest: get backtraces
- Date: Sun, 12 Apr 2020 14:41:54 +0000 (UTC)
commit 99c062d324271724be0dd9a2fc1c36fb32530626
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Apr 12 10:40:07 2020 -0400
reftest: get backtraces
In the hope of making ci-only failures less of
a black hole, print a backtrace for criticals.
This could eventually go into GLib (pass backtrace
symbols along as a log field for criticals), but
for now this will do.
testsuite/reftests/gtk-reftest.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
---
diff --git a/testsuite/reftests/gtk-reftest.c b/testsuite/reftests/gtk-reftest.c
index c09147a6cc..2e95e9d52f 100644
--- a/testsuite/reftests/gtk-reftest.c
+++ b/testsuite/reftests/gtk-reftest.c
@@ -24,6 +24,7 @@
#include "reftest-module.h"
#include "reftest-snapshot.h"
+#include <execinfo.h>
#include <string.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
@@ -384,6 +385,28 @@ add_test_for_file (GFile *file)
g_list_free_full (files, g_object_unref);
}
+static GLogWriterOutput
+log_writer (GLogLevelFlags log_level,
+ const GLogField *fields,
+ gsize n_fields,
+ gpointer user_data)
+{
+ if (log_level & G_LOG_LEVEL_CRITICAL)
+ {
+ void *buffer[1024];
+ int size, i;
+ char **symbols;
+
+ size = backtrace (buffer, 1024);
+ symbols = backtrace_symbols (buffer, size);
+ for (i = 0; i < size; i++)
+ g_print ("%s\n", symbols[i]);
+ free (symbols);
+ }
+
+ return g_log_writer_standard_streams (log_level, fields, n_fields, user_data);
+}
+
int
main (int argc, char **argv)
{
@@ -434,6 +457,8 @@ main (int argc, char **argv)
*/
chdir (basedir);
+ g_log_set_writer_func (log_writer, NULL, NULL);
+
result = g_test_run ();
if (using_tap)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]