[browser] only trace ExitStatus stack trace if `diagnosticTracing` is true (#89432)
authorPavel Savara <pavel.savara@gmail.com>
Tue, 25 Jul 2023 19:01:23 +0000 (21:01 +0200)
committerGitHub <noreply@github.com>
Tue, 25 Jul 2023 19:01:23 +0000 (21:01 +0200)
src/mono/wasm/runtime/loader/exit.ts
src/mono/wasm/runtime/logging.ts

index ae71908..e8cb2e4 100644 (file)
@@ -49,7 +49,7 @@ export function mono_exit(exit_code: number, reason?: any): void {
                 mono_log_debug("abort_startup, reason: " + reason);
                 abort_promises(reason);
             }
-            logErrorOnExit(exit_code, reason);
+            logOnExit(exit_code, reason);
             appendElementOnExit(exit_code);
             if (runtimeHelpers.jiterpreter_dump_stats) runtimeHelpers.jiterpreter_dump_stats(false);
             if (exit_code === 0 && loaderHelpers.config?.interopCleanupOnExit) {
@@ -146,19 +146,26 @@ function appendElementOnExit(exit_code: number) {
     }
 }
 
-function logErrorOnExit(exit_code: number, reason: any) {
+function logOnExit(exit_code: number, reason: any) {
     if (exit_code !== 0 && reason) {
-        if (reason instanceof Error) {
+        // ExitStatus usually is not real JS error and so stack strace is not very useful.
+        // We will use debug level for it, which will print only when diagnosticTracing is set.
+        const mono_log = runtimeHelpers.ExitStatus && reason instanceof runtimeHelpers.ExitStatus
+            ? mono_log_debug
+            : mono_log_error;
+        if (typeof reason == "string") {
+            mono_log(reason);
+        }
+        else if (reason.stack && reason.message) {
             if (runtimeHelpers.stringify_as_error_with_stack) {
-                mono_log_error(runtimeHelpers.stringify_as_error_with_stack(reason));
+                mono_log(runtimeHelpers.stringify_as_error_with_stack(reason));
             } else {
-                mono_log_error(reason.message + "\n" + reason.stack);
+                mono_log(reason.message + "\n" + reason.stack);
             }
         }
-        else if (typeof reason == "string")
-            mono_log_error(reason);
-        else
-            mono_log_error(JSON.stringify(reason));
+        else {
+            mono_log(JSON.stringify(reason));
+        }
     }
     if (loaderHelpers.config && loaderHelpers.config.logExitCode) {
         if (consoleWebSocket) {
index 2b24ad4..e164a78 100644 (file)
@@ -91,8 +91,8 @@ export function mono_wasm_symbolicate_string(message: string): string {
 
 export function mono_wasm_stringify_as_error_with_stack(err: Error | string): string {
     let errObj: any = err;
-    if (!errObj || !errObj.stack || !(errObj instanceof Error)) {
-        errObj = new Error(errObj || "Unknown error");
+    if (!errObj || !errObj.stack) {
+        errObj = new Error(errObj ? ("" + errObj) : "Unknown error");
     }
 
     // Error