aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-crash-report-symbolizer/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-crash-report-symbolizer/index.ts')
-rw-r--r--packages/bun-crash-report-symbolizer/index.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/packages/bun-crash-report-symbolizer/index.ts b/packages/bun-crash-report-symbolizer/index.ts
new file mode 100644
index 000000000..671322547
--- /dev/null
+++ b/packages/bun-crash-report-symbolizer/index.ts
@@ -0,0 +1,42 @@
+import { which } from "bun";
+
+const symbolizerPath = ["llvm-symbolizer-13", "llvm-symbolizer"].find((a) =>
+ which(a),
+);
+
+if (!symbolizerPath) {
+ throw new Error("llvm-symbolizer not found in $PATH");
+}
+
+export const symbolizer = symbolizerPath;
+
+function readCrashReport(text: string) {
+ const lines = text
+ .split("\n")
+ .map((a) => a.trim())
+ .filter((a) => a.length > 0);
+
+ const metaOffset = lines.findIndex((a) => a.includes(" bun meta "));
+ let lastMetaLine = metaOffset + 1;
+ for (; lastMetaLine < lines.length; lastMetaLine++) {
+ const line = lines[lastMetaLine];
+ if (line.includes(" bun meta ")) break;
+ }
+
+ const meta = lines.slice(metaOffset, lastMetaLine);
+ console.log(metaOffset, lastMetaLine);
+ const version = /v(\d+\.\d+\.\d+)/.exec(meta[0])?.[1];
+ var stack = lines
+ .slice(lastMetaLine + 1)
+ .filter((a) => a.length > 0 && !a.includes("ask for"));
+
+ return { version, stack };
+}
+
+console.log(
+ readCrashReport(
+ await Bun.file(
+ "/Users/jarred/.bun/.bun-crash/v0.2.3-1668157348119.crash",
+ ).text(),
+ ),
+);