MISC: Add more error info to error dialog and tail log (#1813)

This commit is contained in:
catloversg
2025-01-09 09:22:13 +07:00
committed by GitHub
parent 1cb2a83b4f
commit 5b6380a5c3
3 changed files with 25 additions and 4 deletions
+2 -1
View File
@@ -2,6 +2,7 @@ import { basicErrorMessage } from "../Netscript/ErrorMessages";
import { ScriptDeath } from "../Netscript/ScriptDeath";
import type { WorkerScript } from "../Netscript/WorkerScript";
import { dialogBoxCreate } from "../ui/React/DialogBox";
import { getErrorMessageWithStackAndCause } from "./ErrorHelper";
/** Generate an error dialog when workerscript is known */
export function handleUnknownError(e: unknown, ws: WorkerScript | null = null, initialText = "") {
@@ -18,7 +19,7 @@ export function handleUnknownError(e: unknown, ws: WorkerScript | null = null, i
} else if (e instanceof Error) {
// Ignore any cancellation errors from Monaco that get here
if (e.name === "Canceled" && e.message === "Canceled") return;
const msg = `${e.message}${e.stack ? `\nstack:\n${e.stack.toString()}` : ""}`;
const msg = getErrorMessageWithStackAndCause(e);
e = ws ? basicErrorMessage(ws, msg) : `RUNTIME ERROR:\n\n${msg}`;
}
if (typeof e !== "string") {
+15
View File
@@ -81,6 +81,21 @@ export function parseUnknownError(error: unknown): {
};
}
export function getErrorMessageWithStackAndCause(error: unknown, prefix = ""): string {
const errorData = parseUnknownError(error);
let errorMessage = `${prefix}${errorData.errorAsString}`;
if (errorData.stack) {
errorMessage += `\nStack: ${errorData.stack}`;
}
if (errorData.causeAsString) {
errorMessage += `\nError cause: ${errorData.causeAsString}`;
if (errorData.causeStack) {
errorMessage += `\nCause stack: ${errorData.causeStack}`;
}
}
return errorMessage;
}
export function getErrorMetadata(error: unknown, errorInfo?: React.ErrorInfo, page?: Page): IErrorMetadata {
const isElectron = navigator.userAgent.toLowerCase().includes(" electron/");
const env = process.env.NODE_ENV === "development" ? GameEnv.Development : GameEnv.Production;