Bug 1882518 - Print the PID when an assertion fails or MOZ_CRASH is reached in debug. r=gsvelto,glandium

Differential Revision: https://phabricator.services.mozilla.com/D202937
This commit is contained in:
Paul Adenot 2024-03-15 09:36:51 +00:00
Родитель 797b8c3d47
Коммит e2290e469b
1 изменённых файлов: 24 добавлений и 9 удалений

Просмотреть файл

@ -17,6 +17,17 @@
# define MOZ_BUFFER_STDERR
#endif
#if defined(XP_WIN)
# include <process.h>
# define MOZ_GET_PID() _getpid()
#elif !defined(__wasi__)
# include <unistd.h>
# define MOZ_GET_PID() getpid()
#else
// Prevent compiler warning
# define MOZ_GET_PID() -1
#endif
#include "mozilla/Attributes.h"
#include "mozilla/Compiler.h"
#include "mozilla/Fuzzing.h"
@ -95,14 +106,15 @@ MOZ_MAYBE_UNUSED static void MOZ_ReportAssertionFailurePrintFrame(
* method is primarily for internal use in this header, and only secondarily
* for use in implementing release-build assertions.
*/
MOZ_MAYBE_UNUSED static MOZ_COLD MOZ_NEVER_INLINE void
MOZ_ReportAssertionFailure(const char* aStr, const char* aFilename,
int aLine) MOZ_PRETEND_NORETURN_FOR_STATIC_ANALYSIS {
MOZ_FUZZING_HANDLE_CRASH_EVENT4("MOZ_ASSERT", aFilename, aLine, aStr);
#ifdef ANDROID
__android_log_print(ANDROID_LOG_FATAL, "MOZ_Assert",
"Assertion failure: %s, at %s:%d\n", aStr, aFilename,
aLine);
"[%d] Assertion failure: %s, at %s:%d\n", MOZ_GET_PID(),
aStr, aFilename, aLine);
# if defined(MOZ_DUMP_ASSERTION_STACK)
MozWalkTheStackWithWriter(MOZ_ReportAssertionFailurePrintFrame, CallerPC(),
/* aMaxFrames */ 0);
@ -110,11 +122,12 @@ MOZ_ReportAssertionFailure(const char* aStr, const char* aFilename,
#else
# if defined(MOZ_BUFFER_STDERR)
char msg[1024] = "";
snprintf(msg, sizeof(msg) - 1, "Assertion failure: %s, at %s:%d\n", aStr,
aFilename, aLine);
snprintf(msg, sizeof(msg) - 1, "[%d] Assertion failure: %s, at %s:%d\n",
MOZ_GET_PID(), aStr, aFilename, aLine);
fputs(msg, stderr);
# else
fprintf(stderr, "Assertion failure: %s, at %s:%d\n", aStr, aFilename, aLine);
fprintf(stderr, "[%d] Assertion failure: %s, at %s:%d\n", MOZ_GET_PID(), aStr,
aFilename, aLine);
# endif
# if defined(MOZ_DUMP_ASSERTION_STACK)
MozWalkTheStack(stderr, CallerPC(), /* aMaxFrames */ 0);
@ -128,15 +141,17 @@ MOZ_MAYBE_UNUSED static MOZ_COLD MOZ_NEVER_INLINE void MOZ_ReportCrash(
int aLine) MOZ_PRETEND_NORETURN_FOR_STATIC_ANALYSIS {
#ifdef ANDROID
__android_log_print(ANDROID_LOG_FATAL, "MOZ_CRASH",
"Hit MOZ_CRASH(%s) at %s:%d\n", aStr, aFilename, aLine);
"[%d] Hit MOZ_CRASH(%s) at %s:%d\n", MOZ_GET_PID(), aStr,
aFilename, aLine);
#else
# if defined(MOZ_BUFFER_STDERR)
char msg[1024] = "";
snprintf(msg, sizeof(msg) - 1, "Hit MOZ_CRASH(%s) at %s:%d\n", aStr,
aFilename, aLine);
snprintf(msg, sizeof(msg) - 1, "[%d] Hit MOZ_CRASH(%s) at %s:%d\n",
MOZ_GET_PID(), aStr, aFilename, aLine);
fputs(msg, stderr);
# else
fprintf(stderr, "Hit MOZ_CRASH(%s) at %s:%d\n", aStr, aFilename, aLine);
fprintf(stderr, "[%d] Hit MOZ_CRASH(%s) at %s:%d\n", MOZ_GET_PID(), aStr,
aFilename, aLine);
# endif
# if defined(MOZ_DUMP_ASSERTION_STACK)
MozWalkTheStack(stderr, CallerPC(), /* aMaxFrames */ 0);