Install FailureSignalHandler to print stack traces in the OSS.
PiperOrigin-RevId: 809151140
diff --git a/e2e_tests/functional_test.cc b/e2e_tests/functional_test.cc
index 42e2f57..49eec37 100644
--- a/e2e_tests/functional_test.cc
+++ b/e2e_tests/functional_test.cc
@@ -217,6 +217,18 @@
EXPECT_THAT_LOG(std_out, HasSubstr("[ FAILED ] MySuite.GoogleTestAssert"));
EXPECT_THAT(status, Ne(ExitCode(0)));
+#ifndef FUZZTEST_USE_CENTIPEDE
+ // There is the gtest stack on stdout, and no stack on stderr.
+ EXPECT_THAT_LOG(std_out, AllOf(HasSubstr("GoogleTestExpect("),
+ HasSubstr("GoogleTestAssert(")));
+ // We remove the reproducer first because it also contains the function name.
+ EXPECT_THAT(RemoveReproducer(RemoveReproducer(std_err, "MySuite",
+ "GoogleTestExpect", ".*"),
+ "MySuite", "GoogleTestAssert", ".*"),
+ AllOf(Not(HasSubstr("GoogleTestExpect(")),
+ Not(HasSubstr("GoogleTestAssert("))));
+#endif
+
// There is no repro example on stdout, and there is one on stderr.
EXPECT_THAT_LOG(
std_out,
@@ -1668,6 +1680,9 @@
ExpectTargetAbort(status, std_err);
#ifndef FUZZTEST_USE_CENTIPEDE
+ // There is a stack both on stdout and stderr.
+ EXPECT_THAT_LOG(std_out, HasSubstr("GoogleTestExpect("));
+ EXPECT_THAT_LOG(std_err, HasSubstr("GoogleTestExpect("));
// There is the repro example only on stderr.
EXPECT_THAT_LOG(std_out,
@@ -1683,6 +1698,9 @@
ExpectTargetAbort(status, std_err);
#ifndef FUZZTEST_USE_CENTIPEDE
+ // There is a stack both on stdout and stderr.
+ EXPECT_THAT_LOG(std_out, HasSubstr("GoogleTestAssert("));
+ EXPECT_THAT_LOG(std_err, HasSubstr("GoogleTestAssert("));
// There is the repro example only on stderr.
EXPECT_THAT_LOG(std_out,
diff --git a/fuzztest/BUILD b/fuzztest/BUILD
index 1bbd23c..ad8e66d 100644
--- a/fuzztest/BUILD
+++ b/fuzztest/BUILD
@@ -106,6 +106,8 @@
testonly = 1,
srcs = ["fuzztest_gtest_main.cc"],
deps = [
+ "@abseil-cpp//absl/debugging:failure_signal_handler",
+ "@abseil-cpp//absl/debugging:symbolize",
"@com_google_fuzztest//fuzztest:init_fuzztest",
"@googletest//:gtest",
],
diff --git a/fuzztest/CMakeLists.txt b/fuzztest/CMakeLists.txt
index d5aaedb..e42edc2 100644
--- a/fuzztest/CMakeLists.txt
+++ b/fuzztest/CMakeLists.txt
@@ -130,6 +130,9 @@
SRCS
"fuzztest_gtest_main.cc"
DEPS
+ absl::debugging
+ absl::failure_signal_handler
+ absl::symbolize
fuzztest::init_fuzztest
GTest::gtest
)
diff --git a/fuzztest/fuzztest_gtest_main.cc b/fuzztest/fuzztest_gtest_main.cc
index 709d036..6902658 100644
--- a/fuzztest/fuzztest_gtest_main.cc
+++ b/fuzztest/fuzztest_gtest_main.cc
@@ -14,8 +14,14 @@
#include "gtest/gtest.h"
#include "./fuzztest/init_fuzztest.h"
+#include "absl/debugging/failure_signal_handler.h"
+#include "absl/debugging/symbolize.h"
int main(int argc, char** argv) {
+ absl::InitializeSymbolizer(argv[0]);
+ absl::FailureSignalHandlerOptions options;
+ options.call_previous_handler = true;
+ absl::InstallFailureSignalHandler(options);
testing::InitGoogleTest(&argc, argv);
// We call fuzztest::ParseAbslFlags rather than absl::ParseCommandLine
// since the latter would complain about any unknown flags that need