mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-17 23:08:36 +02:00
MISC: Add more error info to error dialog and tail log (#1813)
This commit is contained in:
@@ -37,6 +37,7 @@ import { CompleteRunOptions, getRunningScriptsByArgs } from "./Netscript/Netscri
|
|||||||
import { handleUnknownError } from "./utils/ErrorHandler";
|
import { handleUnknownError } from "./utils/ErrorHandler";
|
||||||
import { isLegacyScript, legacyScriptExtension, resolveScriptFilePath, ScriptFilePath } from "./Paths/ScriptFilePath";
|
import { isLegacyScript, legacyScriptExtension, resolveScriptFilePath, ScriptFilePath } from "./Paths/ScriptFilePath";
|
||||||
import { root } from "./Paths/Directory";
|
import { root } from "./Paths/Directory";
|
||||||
|
import { getErrorMessageWithStackAndCause } from "./utils/ErrorHelper";
|
||||||
import { exceptionAlert } from "./utils/helpers/exceptionAlert";
|
import { exceptionAlert } from "./utils/helpers/exceptionAlert";
|
||||||
|
|
||||||
export const NetscriptPorts = new Map<PortNumber, Port>();
|
export const NetscriptPorts = new Map<PortNumber, Port>();
|
||||||
@@ -349,10 +350,14 @@ Otherwise, this can also occur if you have attempted to launch a script from a t
|
|||||||
killWorkerScript(workerScript);
|
killWorkerScript(workerScript);
|
||||||
workerScript.log("", () => "Script finished running");
|
workerScript.log("", () => "Script finished running");
|
||||||
})
|
})
|
||||||
.catch(function (e) {
|
.catch(function (error) {
|
||||||
handleUnknownError(e, workerScript);
|
handleUnknownError(error, workerScript);
|
||||||
killWorkerScript(workerScript);
|
killWorkerScript(workerScript);
|
||||||
workerScript.log("", () => (e instanceof ScriptDeath ? "Script killed." : "Script crashed due to an error."));
|
workerScript.log("", () =>
|
||||||
|
error instanceof ScriptDeath
|
||||||
|
? "Script killed."
|
||||||
|
: getErrorMessageWithStackAndCause(error, "Script crashed due to an error: "),
|
||||||
|
);
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
// The earnings are transferred to the parent if it still exists.
|
// The earnings are transferred to the parent if it still exists.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { basicErrorMessage } from "../Netscript/ErrorMessages";
|
|||||||
import { ScriptDeath } from "../Netscript/ScriptDeath";
|
import { ScriptDeath } from "../Netscript/ScriptDeath";
|
||||||
import type { WorkerScript } from "../Netscript/WorkerScript";
|
import type { WorkerScript } from "../Netscript/WorkerScript";
|
||||||
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
import { dialogBoxCreate } from "../ui/React/DialogBox";
|
||||||
|
import { getErrorMessageWithStackAndCause } from "./ErrorHelper";
|
||||||
|
|
||||||
/** Generate an error dialog when workerscript is known */
|
/** Generate an error dialog when workerscript is known */
|
||||||
export function handleUnknownError(e: unknown, ws: WorkerScript | null = null, initialText = "") {
|
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) {
|
} else if (e instanceof Error) {
|
||||||
// Ignore any cancellation errors from Monaco that get here
|
// Ignore any cancellation errors from Monaco that get here
|
||||||
if (e.name === "Canceled" && e.message === "Canceled") return;
|
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}`;
|
e = ws ? basicErrorMessage(ws, msg) : `RUNTIME ERROR:\n\n${msg}`;
|
||||||
}
|
}
|
||||||
if (typeof e !== "string") {
|
if (typeof e !== "string") {
|
||||||
|
|||||||
@@ -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 {
|
export function getErrorMetadata(error: unknown, errorInfo?: React.ErrorInfo, page?: Page): IErrorMetadata {
|
||||||
const isElectron = navigator.userAgent.toLowerCase().includes(" electron/");
|
const isElectron = navigator.userAgent.toLowerCase().includes(" electron/");
|
||||||
const env = process.env.NODE_ENV === "development" ? GameEnv.Development : GameEnv.Production;
|
const env = process.env.NODE_ENV === "development" ? GameEnv.Development : GameEnv.Production;
|
||||||
|
|||||||
Reference in New Issue
Block a user