From f9b58b5c14518e5fcad634a3dae91b47f3068190 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Thu, 11 Aug 2022 11:59:16 +0200 Subject: [PATCH] Include current test name in crash reports Previously a crashing test's output would end with the last completed test's output followed by a crash report, leading readers (understandably enough) to conclude that the last-named test is the one that crashed. In fact the crashing test is typically the next one in the class definition. Include the current test function's name (when non-null) in the output accompanying crash logs. This always goes to stderr so does not show up in the expected output. Pick-to: 6.4 Change-Id: Icab0ccd1fe434827ee92459ab0c97f9dc034754e Reviewed-by: Jason McDonald --- src/testlib/qtestcase.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 6fd6e76def..89530f823f 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -358,7 +358,9 @@ static void printTestRunTime() { const int msecsFunctionTime = qRound(QTestLog::msecsFunctionTime()); const int msecsTotalTime = qRound(QTestLog::msecsTotalTime()); - writeToStderr("\n Function time: ", asyncSafeToString(msecsFunctionTime), + const char *const name = QTest::currentTestFunction(); + writeToStderr("\n ", name ? name : "[Non-test]", + " function time: ", asyncSafeToString(msecsFunctionTime), "ms, total time: ", asyncSafeToString(msecsTotalTime), "ms\n"); } @@ -1878,12 +1880,14 @@ private: const int msecsFunctionTime = qRound(QTestLog::msecsFunctionTime()); const int msecsTotalTime = qRound(QTestLog::msecsTotalTime()); const void *exceptionAddress = exInfo->ExceptionRecord->ExceptionAddress; - fprintf(stderr, "A crash occurred in %s.\n" - "Function time: %dms Total time: %dms\n\n" + fprintf(stderr, "A crash occurred in %s.\n", appName); + if (const char *name = QTest::currentTestFunction()) + fprintf(stderr, "While testing %s\n", name); + fprintf(stderr, "Function time: %dms Total time: %dms\n\n" "Exception address: 0x%p\n" "Exception code : 0x%lx\n", - appName, msecsFunctionTime, msecsTotalTime, - exceptionAddress, exInfo->ExceptionRecord->ExceptionCode); + msecsFunctionTime, msecsTotalTime, exceptionAddress, + exInfo->ExceptionRecord->ExceptionCode); DebugSymbolResolver resolver(GetCurrentProcess()); if (resolver.isValid()) {