@descryy/runtime-adapter-rust 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +6 -0
- package/dist/rust-frame-parsing.d.ts +19 -43
- package/dist/rust-frame-parsing.d.ts.map +1 -1
- package/dist/rust-frame-parsing.js +20 -44
- package/dist/rust-frame-parsing.js.map +1 -1
- package/dist/rust-runtime-adapter.d.ts +11 -16
- package/dist/rust-runtime-adapter.d.ts.map +1 -1
- package/dist/rust-runtime-adapter.js +12 -19
- package/dist/rust-runtime-adapter.js.map +1 -1
- package/dist/rust-stack-trace-parser.d.ts +21 -71
- package/dist/rust-stack-trace-parser.d.ts.map +1 -1
- package/dist/rust-stack-trace-parser.js +34 -107
- package/dist/rust-stack-trace-parser.js.map +1 -1
- package/package.json +8 -3
package/LICENSE
ADDED
|
@@ -1,43 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Rust panic and backtrace line shapes.
|
|
2
|
+
* Rust panic and backtrace line shapes. Verified against a real toolchain
|
|
3
|
+
* (rustc 1.91.1) by compiling and running a fixture.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* Unlike other runtimes here, the panic header itself carries a source
|
|
6
|
+
* location (line and column) — `panicked at thrower.rs:3:13`. Since
|
|
7
|
+
* `RUST_BACKTRACE` is off by default, that header is the only location in
|
|
8
|
+
* ordinary production output, so a parser requiring a backtrace would
|
|
9
|
+
* return nothing for the common case.
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
* thread 'main'
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 0: __rustc::rust_begin_unwind
|
|
12
|
-
* at /rustc/ed61e7d.../library/std/src/panicking.rs:698:5
|
|
13
|
-
* 5: thrower::delete_invoice
|
|
14
|
-
* at ./thrower.rs:3:13
|
|
15
|
-
* 7: thrower::main
|
|
16
|
-
* at ./thrower.rs:11:20
|
|
17
|
-
* ```
|
|
11
|
+
* Two header shapes: the modern one (verified) and the pre-1.65 form with
|
|
12
|
+
* the message inside the header — `thread 'main' panicked at 'invoice 3
|
|
13
|
+
* is corrupt', src/main.rs:3:13` — handled from its documented shape (not
|
|
14
|
+
* verified here) since it's still common in deployed toolchains.
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* **off by default**, so in ordinary production output the header is the
|
|
23
|
-
* only location there is. A parser that required a backtrace would return
|
|
24
|
-
* nothing for the common case while the precise answer sat in line one.
|
|
25
|
-
*
|
|
26
|
-
* Two header shapes exist and both are supported. The modern one above was
|
|
27
|
-
* verified here. The pre-1.65 form put the message inside the header —
|
|
28
|
-
* `thread 'main' panicked at 'invoice 3 is corrupt', src/main.rs:3:13` —
|
|
29
|
-
* and is supported from its documented shape, **not** verified on this
|
|
30
|
-
* machine; it is still common in deployed toolchains, which is why it is
|
|
31
|
-
* handled rather than refused.
|
|
32
|
-
*
|
|
33
|
-
* Frames are two lines: ` N: symbol`, then a deeply-indented
|
|
34
|
-
* `at path:line:col`. The `at` line is **optional** — a build without debug
|
|
35
|
-
* info prints the symbol alone, which is what separates
|
|
36
|
-
* `debug-info-present` from `debug-info-stripped` here.
|
|
16
|
+
* Frames are two lines: ` N: symbol`, then an indented `at path:line:col`.
|
|
17
|
+
* The `at` line is optional — no debug info means the symbol alone, which
|
|
18
|
+
* separates `debug-info-present` from `debug-info-stripped`.
|
|
37
19
|
*/
|
|
38
20
|
export interface RawRustFrame {
|
|
39
21
|
readonly functionName: string;
|
|
40
|
-
/** Null when the frame printed no `at` line — a build with no debug info. Never fabricated. */
|
|
41
22
|
readonly file: string | null;
|
|
42
23
|
readonly line: number | null;
|
|
43
24
|
readonly column: number | null;
|
|
@@ -64,16 +45,11 @@ export declare function parseRustFrameLocation(line: string): {
|
|
|
64
45
|
column: number;
|
|
65
46
|
} | null;
|
|
66
47
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* therefore only counts as block content **after `stack backtrace:`**.
|
|
73
|
-
*
|
|
74
|
-
* The panic message line, which follows the header and is arbitrary text,
|
|
75
|
-
* is accepted as block content only in the single position where Rust puts
|
|
76
|
-
* it: immediately after a modern header.
|
|
48
|
+
* Stateful line classifier (RT-035). ` 0: something` looks like an
|
|
49
|
+
* ordinary numbered list item, so a symbol line only counts as block
|
|
50
|
+
* content after `stack backtrace:`. The panic message line (arbitrary
|
|
51
|
+
* text) is accepted only in the one position Rust puts it: right after a
|
|
52
|
+
* modern header.
|
|
77
53
|
*/
|
|
78
54
|
export declare function createRustLineClassifier(): {
|
|
79
55
|
isHeader(line: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-frame-parsing.d.ts","sourceRoot":"","sources":["../src/rust-frame-parsing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-frame-parsing.d.ts","sourceRoot":"","sources":["../src/rust-frame-parsing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAeD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsBzE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQ1G;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CA8BA"}
|
|
@@ -1,39 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Rust panic and backtrace line shapes.
|
|
2
|
+
* Rust panic and backtrace line shapes. Verified against a real toolchain
|
|
3
|
+
* (rustc 1.91.1) by compiling and running a fixture.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* Unlike other runtimes here, the panic header itself carries a source
|
|
6
|
+
* location (line and column) — `panicked at thrower.rs:3:13`. Since
|
|
7
|
+
* `RUST_BACKTRACE` is off by default, that header is the only location in
|
|
8
|
+
* ordinary production output, so a parser requiring a backtrace would
|
|
9
|
+
* return nothing for the common case.
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
* thread 'main'
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* 0: __rustc::rust_begin_unwind
|
|
12
|
-
* at /rustc/ed61e7d.../library/std/src/panicking.rs:698:5
|
|
13
|
-
* 5: thrower::delete_invoice
|
|
14
|
-
* at ./thrower.rs:3:13
|
|
15
|
-
* 7: thrower::main
|
|
16
|
-
* at ./thrower.rs:11:20
|
|
17
|
-
* ```
|
|
11
|
+
* Two header shapes: the modern one (verified) and the pre-1.65 form with
|
|
12
|
+
* the message inside the header — `thread 'main' panicked at 'invoice 3
|
|
13
|
+
* is corrupt', src/main.rs:3:13` — handled from its documented shape (not
|
|
14
|
+
* verified here) since it's still common in deployed toolchains.
|
|
18
15
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* **off by default**, so in ordinary production output the header is the
|
|
23
|
-
* only location there is. A parser that required a backtrace would return
|
|
24
|
-
* nothing for the common case while the precise answer sat in line one.
|
|
25
|
-
*
|
|
26
|
-
* Two header shapes exist and both are supported. The modern one above was
|
|
27
|
-
* verified here. The pre-1.65 form put the message inside the header —
|
|
28
|
-
* `thread 'main' panicked at 'invoice 3 is corrupt', src/main.rs:3:13` —
|
|
29
|
-
* and is supported from its documented shape, **not** verified on this
|
|
30
|
-
* machine; it is still common in deployed toolchains, which is why it is
|
|
31
|
-
* handled rather than refused.
|
|
32
|
-
*
|
|
33
|
-
* Frames are two lines: ` N: symbol`, then a deeply-indented
|
|
34
|
-
* `at path:line:col`. The `at` line is **optional** — a build without debug
|
|
35
|
-
* info prints the symbol alone, which is what separates
|
|
36
|
-
* `debug-info-present` from `debug-info-stripped` here.
|
|
16
|
+
* Frames are two lines: ` N: symbol`, then an indented `at path:line:col`.
|
|
17
|
+
* The `at` line is optional — no debug info means the symbol alone, which
|
|
18
|
+
* separates `debug-info-present` from `debug-info-stripped`.
|
|
37
19
|
*/
|
|
38
20
|
/** Modern (verified): `thread 'main' (468745) panicked at thrower.rs:3:13:` — the thread id in parens is optional. */
|
|
39
21
|
const HEADER_MODERN = /^thread '(?<thread>[^']*)'(?:\s+\(\d+\))?\s+panicked at (?<file>.+?):(?<line>\d+):(?<col>\d+):\s*$/;
|
|
@@ -100,16 +82,11 @@ export function parseRustFrameLocation(line) {
|
|
|
100
82
|
};
|
|
101
83
|
}
|
|
102
84
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
* therefore only counts as block content **after `stack backtrace:`**.
|
|
109
|
-
*
|
|
110
|
-
* The panic message line, which follows the header and is arbitrary text,
|
|
111
|
-
* is accepted as block content only in the single position where Rust puts
|
|
112
|
-
* it: immediately after a modern header.
|
|
85
|
+
* Stateful line classifier (RT-035). ` 0: something` looks like an
|
|
86
|
+
* ordinary numbered list item, so a symbol line only counts as block
|
|
87
|
+
* content after `stack backtrace:`. The panic message line (arbitrary
|
|
88
|
+
* text) is accepted only in the one position Rust puts it: right after a
|
|
89
|
+
* modern header.
|
|
113
90
|
*/
|
|
114
91
|
export function createRustLineClassifier() {
|
|
115
92
|
let justSawHeader = false;
|
|
@@ -125,8 +102,7 @@ export function createRustLineClassifier() {
|
|
|
125
102
|
},
|
|
126
103
|
isFrame(line) {
|
|
127
104
|
if (justSawHeader) {
|
|
128
|
-
//
|
|
129
|
-
// message — whatever comes next. Either way exactly one line.
|
|
105
|
+
// message line (or, for legacy headers, whatever comes next) — exactly one line
|
|
130
106
|
justSawHeader = false;
|
|
131
107
|
return true;
|
|
132
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-frame-parsing.js","sourceRoot":"","sources":["../src/rust-frame-parsing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-frame-parsing.js","sourceRoot":"","sources":["../src/rust-frame-parsing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Concrete `RuntimeAdapter` for Rust.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* the same two values: `debug-info-present` when a location came back,
|
|
10
|
-
* `debug-info-stripped` when the symbol is all there is.
|
|
4
|
+
* Reliability is per-frame, from whether the frame printed an `at` line: a
|
|
5
|
+
* debug build prints `symbol` then `at path:line:col`, a build with no
|
|
6
|
+
* debug info prints the symbol alone — same distinction the JVM makes for
|
|
7
|
+
* a class with/without a `LineNumberTable`, so it takes the same two
|
|
8
|
+
* values: `debug-info-present` / `debug-info-stripped`.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* so a split-debuginfo build is currently classified as though it were
|
|
18
|
-
* embedded. It reports `debug-info-stripped` for frames whose location is
|
|
19
|
-
* missing, which is true but understates why.
|
|
10
|
+
* Not handled: `-C split-debuginfo=packed` puts DWARF in a separate `.dwp`
|
|
11
|
+
* file (a real side artifact, deserving `side-artifact-*`). The default on
|
|
12
|
+
* Linux embeds it (verified here), and a split-debuginfo build can't be
|
|
13
|
+
* distinguished from text output alone, so it's misclassified as
|
|
14
|
+
* `debug-info-stripped` — true but understates why.
|
|
20
15
|
*/
|
|
21
16
|
import type { RuntimeAdapter } from "@descryy/runtime-backend-observation";
|
|
22
17
|
import type { SourceLocationResolver } from "@descryy/runtime-backend-observation";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-runtime-adapter.d.ts","sourceRoot":"","sources":["../src/rust-runtime-adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-runtime-adapter.d.ts","sourceRoot":"","sources":["../src/rust-runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,sCAAsC,CAAC;AAGhG,OAAO,KAAK,EAAoB,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAKrG,wBAAgB,gCAAgC,IAAI,sBAAsB,CAazE;AAED,MAAM,WAAW,yBAAyB;IACxC,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,yBAA8B,GAAG,cAAc,CAgBhG"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Concrete `RuntimeAdapter` for Rust.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* the same two values: `debug-info-present` when a location came back,
|
|
10
|
-
* `debug-info-stripped` when the symbol is all there is.
|
|
4
|
+
* Reliability is per-frame, from whether the frame printed an `at` line: a
|
|
5
|
+
* debug build prints `symbol` then `at path:line:col`, a build with no
|
|
6
|
+
* debug info prints the symbol alone — same distinction the JVM makes for
|
|
7
|
+
* a class with/without a `LineNumberTable`, so it takes the same two
|
|
8
|
+
* values: `debug-info-present` / `debug-info-stripped`.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* so a split-debuginfo build is currently classified as though it were
|
|
18
|
-
* embedded. It reports `debug-info-stripped` for frames whose location is
|
|
19
|
-
* missing, which is true but understates why.
|
|
10
|
+
* Not handled: `-C split-debuginfo=packed` puts DWARF in a separate `.dwp`
|
|
11
|
+
* file (a real side artifact, deserving `side-artifact-*`). The default on
|
|
12
|
+
* Linux embeds it (verified here), and a split-debuginfo build can't be
|
|
13
|
+
* distinguished from text output alone, so it's misclassified as
|
|
14
|
+
* `debug-info-stripped` — true but understates why.
|
|
20
15
|
*/
|
|
21
16
|
import { createLogCollector } from "@descryy/runtime-backend-observation";
|
|
22
17
|
import { createRustLineClassifier } from "./rust-frame-parsing.js";
|
|
@@ -27,9 +22,7 @@ export function createRustSourceLocationResolver() {
|
|
|
27
22
|
return Promise.resolve({
|
|
28
23
|
file: frame.file,
|
|
29
24
|
line: frame.line,
|
|
30
|
-
// Rust is the only runtime here besides V8 that prints a real
|
|
31
|
-
// column, and it prints one in the panic header too.
|
|
32
|
-
column: frame.column,
|
|
25
|
+
column: frame.column, // Rust is the only runtime here besides V8 that prints a real column
|
|
33
26
|
functionName: frame.functionName,
|
|
34
27
|
reliability: frame.line === null ? "debug-info-stripped" : "debug-info-present",
|
|
35
28
|
resolvedVia: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-runtime-adapter.js","sourceRoot":"","sources":["../src/rust-runtime-adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-runtime-adapter.js","sourceRoot":"","sources":["../src/rust-runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,OAAO,CAAC,KAAuB;YAC7B,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,qEAAqE;gBAC3F,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB;gBAC/E,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,wBAAwB,CAAC,UAAqC,EAAE;IAC9E,MAAM,sBAAsB,GAAG,gCAAgC,EAAE,CAAC;IAClE,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,sBAAsB,CAAC,CAAC;IAE5E,SAAS,uBAAuB,CAAC,OAAuC;QACtE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5B,kBAAkB,CAAC;YACjB,MAAM;YACN,UAAU,EAAE,wBAAwB,EAAE;YACtC,gBAAgB;YAChB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,CAAC;AACjG,CAAC"}
|
|
@@ -1,77 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Composes Rust's line recognition with a `SourceLocationResolver`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* `
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* says where that is.** Measured on a live threaded server (RT-121):
|
|
26
|
-
*
|
|
27
|
-
* ```
|
|
28
|
-
* thread '<unnamed>' (531538) panicked at server.rs:10:31:
|
|
29
|
-
* invoice has no customer
|
|
30
|
-
* stack backtrace:
|
|
31
|
-
* 0: __rustc::rust_begin_unwind
|
|
32
|
-
* …
|
|
33
|
-
* 4: core::option::Option<T>::expect
|
|
34
|
-
* 5: server::read_customer_name
|
|
35
|
-
* at ./server.rs:10:31 <- the header's own location
|
|
36
|
-
* 6: server::delete_invoice
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* `frames[0]` becomes `Evidence.sourceLocation` for every language
|
|
40
|
-
* (`collector.ts`), so untouched this reports
|
|
41
|
-
* `library/std/src/panicking.rs:698` — inside the Rust standard library —
|
|
42
|
-
* for every panic.
|
|
43
|
-
*
|
|
44
|
-
* **And the runtime turns the backtrace on itself.** `RUST_BACKTRACE` is
|
|
45
|
-
* off in ordinary Rust, but `withDefaultProcessEnv` sets it to `1` for
|
|
46
|
-
* every process the controller spawns — a deliberate, separately-reasoned
|
|
47
|
-
* decision (a panic with no backtrace is a collector-absence masquerading
|
|
48
|
-
* as application success). So the backtrace shape is not the unusual case
|
|
49
|
-
* here; inside Descry it is the *only* case, unless a caller opts out
|
|
50
|
-
* explicitly. Which means without this rooting, the more diagnostics the
|
|
51
|
-
* platform asks Rust for, the worse the location it reports: the header-only
|
|
52
|
-
* path below yields the exact panic site, and the enriched path yields
|
|
53
|
-
* `panicking.rs`. That was measured (RT-121), after being predicted
|
|
54
|
-
* backwards — this comment first claimed the header-only shape was the
|
|
55
|
-
* production default *for the managed path*, which the controller had
|
|
56
|
-
* already made false.
|
|
57
|
-
*
|
|
58
|
-
* This is **not** the std/core filter the paragraph above refuses, and
|
|
59
|
-
* since RT-083 it does not even look like one: **every frame stays in
|
|
60
|
-
* `frames`** and `primaryFrameIndex` points at the failure site. The
|
|
61
|
-
* decision above — *"std and core frames are kept; filtering them would be
|
|
62
|
-
* a readability judgment applied to evidence"* — is honoured rather than
|
|
63
|
-
* superseded. An earlier version of this parser sliced the list, and the
|
|
64
|
-
* contract gaining a field for the distinction is what made that
|
|
65
|
-
* unnecessary.
|
|
66
|
-
*
|
|
67
|
-
* The join is exact, on a position the runtime printed itself: the header's
|
|
68
|
-
* `file:line:column`, matched against a frame's own `at` location, column
|
|
69
|
-
* included. No name is inspected, no path is classified as "library" or
|
|
70
|
-
* "application", and a backtrace with no matching frame leaves the index at
|
|
71
|
-
* `0` rather than guessing — which is why `core::option::Option<T>::expect`
|
|
72
|
-
* being a `core` frame is irrelevant. It happens to sit above the declared
|
|
73
|
-
* panic site; a `core` frame *below* it would be pointed at just the same
|
|
74
|
-
* if that is where the header said the panic was.
|
|
4
|
+
* A panic with no backtrace still yields a location — the common case,
|
|
5
|
+
* since `RUST_BACKTRACE` is off by default. The header carries
|
|
6
|
+
* `file:line:column` for the panic site itself, so a header-only panic
|
|
7
|
+
* produces a single-frame trace with `functionName: null` rather than
|
|
8
|
+
* discarding the location. When a backtrace is present, its frames
|
|
9
|
+
* replace that frame.
|
|
10
|
+
*
|
|
11
|
+
* `std`/`core` frames are kept — they're real frames, and the top of every
|
|
12
|
+
* backtrace is several of them. Filtering is a consumer's readability
|
|
13
|
+
* judgment on paths, not something the evidence itself should do.
|
|
14
|
+
*
|
|
15
|
+
* `primaryFrameIndex` is rooted at the panic site by joining the header's
|
|
16
|
+
* `file:line:column` against a frame's own `at` location (column
|
|
17
|
+
* included, measured on a live server, RT-121) — untouched, `frames[0]`
|
|
18
|
+
* would report `library/std/src/panicking.rs:698` for every panic, since
|
|
19
|
+
* `withDefaultProcessEnv` sets `RUST_BACKTRACE=1` for every spawned
|
|
20
|
+
* process (a panic with no backtrace is collector-absence masquerading as
|
|
21
|
+
* success), making the enriched backtrace the only case Descry sees. No
|
|
22
|
+
* name is inspected and no path classified as "library"/"application" —
|
|
23
|
+
* a backtrace with no matching frame leaves the index at `0`. Every frame
|
|
24
|
+
* stays in `frames` (RT-083); this roots the index, it doesn't filter.
|
|
75
25
|
*/
|
|
76
26
|
import type { SourceLocationResolver, StackTraceParser } from "@descryy/runtime-backend-observation";
|
|
77
27
|
export declare function createRustStackTraceParser(resolver: SourceLocationResolver): StackTraceParser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-stack-trace-parser.d.ts","sourceRoot":"","sources":["../src/rust-stack-trace-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-stack-trace-parser.d.ts","sourceRoot":"","sources":["../src/rust-stack-trace-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAyBrG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,CA+D7F"}
|
|
@@ -1,91 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Composes Rust's line recognition with a `SourceLocationResolver`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* prints, so a header-only panic produces a single-frame trace whose
|
|
11
|
-
* `functionName` is null: the position is known, the function is not, and
|
|
12
|
-
* neither is invented.
|
|
4
|
+
* A panic with no backtrace still yields a location — the common case,
|
|
5
|
+
* since `RUST_BACKTRACE` is off by default. The header carries
|
|
6
|
+
* `file:line:column` for the panic site itself, so a header-only panic
|
|
7
|
+
* produces a single-frame trace with `functionName: null` rather than
|
|
8
|
+
* discarding the location. When a backtrace is present, its frames
|
|
9
|
+
* replace that frame.
|
|
13
10
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* `std`/`core` frames are kept — they're real frames, and the top of every
|
|
12
|
+
* backtrace is several of them. Filtering is a consumer's readability
|
|
13
|
+
* judgment on paths, not something the evidence itself should do.
|
|
16
14
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* ```
|
|
28
|
-
* thread '<unnamed>' (531538) panicked at server.rs:10:31:
|
|
29
|
-
* invoice has no customer
|
|
30
|
-
* stack backtrace:
|
|
31
|
-
* 0: __rustc::rust_begin_unwind
|
|
32
|
-
* …
|
|
33
|
-
* 4: core::option::Option<T>::expect
|
|
34
|
-
* 5: server::read_customer_name
|
|
35
|
-
* at ./server.rs:10:31 <- the header's own location
|
|
36
|
-
* 6: server::delete_invoice
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* `frames[0]` becomes `Evidence.sourceLocation` for every language
|
|
40
|
-
* (`collector.ts`), so untouched this reports
|
|
41
|
-
* `library/std/src/panicking.rs:698` — inside the Rust standard library —
|
|
42
|
-
* for every panic.
|
|
43
|
-
*
|
|
44
|
-
* **And the runtime turns the backtrace on itself.** `RUST_BACKTRACE` is
|
|
45
|
-
* off in ordinary Rust, but `withDefaultProcessEnv` sets it to `1` for
|
|
46
|
-
* every process the controller spawns — a deliberate, separately-reasoned
|
|
47
|
-
* decision (a panic with no backtrace is a collector-absence masquerading
|
|
48
|
-
* as application success). So the backtrace shape is not the unusual case
|
|
49
|
-
* here; inside Descry it is the *only* case, unless a caller opts out
|
|
50
|
-
* explicitly. Which means without this rooting, the more diagnostics the
|
|
51
|
-
* platform asks Rust for, the worse the location it reports: the header-only
|
|
52
|
-
* path below yields the exact panic site, and the enriched path yields
|
|
53
|
-
* `panicking.rs`. That was measured (RT-121), after being predicted
|
|
54
|
-
* backwards — this comment first claimed the header-only shape was the
|
|
55
|
-
* production default *for the managed path*, which the controller had
|
|
56
|
-
* already made false.
|
|
57
|
-
*
|
|
58
|
-
* This is **not** the std/core filter the paragraph above refuses, and
|
|
59
|
-
* since RT-083 it does not even look like one: **every frame stays in
|
|
60
|
-
* `frames`** and `primaryFrameIndex` points at the failure site. The
|
|
61
|
-
* decision above — *"std and core frames are kept; filtering them would be
|
|
62
|
-
* a readability judgment applied to evidence"* — is honoured rather than
|
|
63
|
-
* superseded. An earlier version of this parser sliced the list, and the
|
|
64
|
-
* contract gaining a field for the distinction is what made that
|
|
65
|
-
* unnecessary.
|
|
66
|
-
*
|
|
67
|
-
* The join is exact, on a position the runtime printed itself: the header's
|
|
68
|
-
* `file:line:column`, matched against a frame's own `at` location, column
|
|
69
|
-
* included. No name is inspected, no path is classified as "library" or
|
|
70
|
-
* "application", and a backtrace with no matching frame leaves the index at
|
|
71
|
-
* `0` rather than guessing — which is why `core::option::Option<T>::expect`
|
|
72
|
-
* being a `core` frame is irrelevant. It happens to sit above the declared
|
|
73
|
-
* panic site; a `core` frame *below* it would be pointed at just the same
|
|
74
|
-
* if that is where the header said the panic was.
|
|
15
|
+
* `primaryFrameIndex` is rooted at the panic site by joining the header's
|
|
16
|
+
* `file:line:column` against a frame's own `at` location (column
|
|
17
|
+
* included, measured on a live server, RT-121) — untouched, `frames[0]`
|
|
18
|
+
* would report `library/std/src/panicking.rs:698` for every panic, since
|
|
19
|
+
* `withDefaultProcessEnv` sets `RUST_BACKTRACE=1` for every spawned
|
|
20
|
+
* process (a panic with no backtrace is collector-absence masquerading as
|
|
21
|
+
* success), making the enriched backtrace the only case Descry sees. No
|
|
22
|
+
* name is inspected and no path classified as "library"/"application" —
|
|
23
|
+
* a backtrace with no matching frame leaves the index at `0`. Every frame
|
|
24
|
+
* stays in `frames` (RT-083); this roots the index, it doesn't filter.
|
|
75
25
|
*/
|
|
76
26
|
import { isRustBacktraceStartLine, parseRustFrameLocation, parseRustFrameSymbol, parseRustPanicHeader, } from "./rust-frame-parsing.js";
|
|
77
27
|
/**
|
|
78
|
-
* Whether a backtrace frame's
|
|
79
|
-
* header declared.
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* comparison is a suffix test in either direction because the two are
|
|
84
|
-
* printed by different code paths and disagree on prefix: the header says
|
|
85
|
-
* `server.rs:10:31` where the frame says `at ./server.rs:10:31` (measured),
|
|
86
|
-
* and under cargo both are relative to different roots. Requiring string
|
|
87
|
-
* equality would silently never match, which is the failure mode that reads
|
|
88
|
-
* as "this rule does nothing" while every test still passes.
|
|
28
|
+
* Whether a backtrace frame's `at` location is the position the panic
|
|
29
|
+
* header declared. Line/column must match exactly. File comparison is a
|
|
30
|
+
* suffix test in either direction: the header says `server.rs:10:31`
|
|
31
|
+
* where the frame says `at ./server.rs:10:31` (measured) — different
|
|
32
|
+
* roots under cargo — so exact string equality would silently never match.
|
|
89
33
|
*/
|
|
90
34
|
function isDeclaredPanicSite(header, location) {
|
|
91
35
|
if (location === null)
|
|
@@ -105,7 +49,7 @@ export function createRustStackTraceParser(resolver) {
|
|
|
105
49
|
if (header === null && backtraceStart === -1)
|
|
106
50
|
return null;
|
|
107
51
|
const frames = [];
|
|
108
|
-
|
|
52
|
+
// index of the frame at the header's declared position, or -1 if the backtrace never names it
|
|
109
53
|
let declaredPanicSite = -1;
|
|
110
54
|
if (backtraceStart !== -1) {
|
|
111
55
|
for (let i = backtraceStart + 1; i < lines.length; i++) {
|
|
@@ -115,10 +59,7 @@ export function createRustStackTraceParser(resolver) {
|
|
|
115
59
|
const symbol = parseRustFrameSymbol(symbolLine);
|
|
116
60
|
if (symbol === null)
|
|
117
61
|
continue;
|
|
118
|
-
//
|
|
119
|
-
// the symbol alone. Looking ahead one line and accepting its
|
|
120
|
-
// absence is what makes debug-info-stripped observable rather
|
|
121
|
-
// than a fabricated location.
|
|
62
|
+
// `at` line optional (no debug info -> symbol alone); absence here is what makes debug-info-stripped observable
|
|
122
63
|
const next = lines[i + 1];
|
|
123
64
|
const location = next === undefined ? null : parseRustFrameLocation(next);
|
|
124
65
|
const resolved = await resolver.resolve({
|
|
@@ -128,9 +69,7 @@ export function createRustStackTraceParser(resolver) {
|
|
|
128
69
|
functionName: symbol,
|
|
129
70
|
});
|
|
130
71
|
frames.push({ location: resolved, raw: location === null ? symbolLine : `${symbolLine}\n${next}` });
|
|
131
|
-
//
|
|
132
|
-
// position further down, and the outermost repetition is not
|
|
133
|
-
// where execution was.
|
|
72
|
+
// first match only: a recursive panic site repeats the position further down
|
|
134
73
|
if (declaredPanicSite === -1 && header !== null && isDeclaredPanicSite(header, location)) {
|
|
135
74
|
declaredPanicSite = frames.length - 1;
|
|
136
75
|
}
|
|
@@ -141,34 +80,22 @@ export function createRustStackTraceParser(resolver) {
|
|
|
141
80
|
if (frames.length === 0) {
|
|
142
81
|
if (header === null)
|
|
143
82
|
return null;
|
|
144
|
-
//
|
|
145
|
-
// known, and `functionName: null` says so rather than guessing.
|
|
83
|
+
// header-only panic: position real, function unknown
|
|
146
84
|
const resolved = await resolver.resolve({
|
|
147
85
|
file: header.file,
|
|
148
86
|
line: header.line,
|
|
149
87
|
column: header.column,
|
|
150
88
|
functionName: null,
|
|
151
89
|
});
|
|
152
|
-
//
|
|
90
|
+
// one frame, and it is the panic site — the header said so
|
|
153
91
|
return { fidelity: "synchronous", frames: [{ location: resolved, raw: rawText.split(/\r\n|\r|\n/)[0] ?? "" }], primaryFrameIndex: 0 };
|
|
154
92
|
}
|
|
155
|
-
//
|
|
156
|
-
// names it. `declaredPanicSite === -1` means it did not — an inlined
|
|
157
|
-
// frame, a `RUST_BACKTRACE=full` layout, a header this parser read
|
|
158
|
-
// from a different panic — and the index stays `0`, because the
|
|
159
|
-
// alternative is choosing a site on no evidence.
|
|
93
|
+
// points at the header-declared position when the backtrace names it; stays 0 otherwise (no evidence to guess from)
|
|
160
94
|
const primaryFrameIndex = declaredPanicSite > 0 ? declaredPanicSite : 0;
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
// Fidelity is `synchronous`: a Rust backtrace walks the real thread
|
|
167
|
-
// stack. An async task's stack genuinely ends at the executor's poll
|
|
168
|
-
// rather than at the logical `.await`er, but nothing in the text says
|
|
169
|
-
// so — detecting it would need runtime task correlation, and claiming
|
|
170
|
-
// fragmentation without evidence is the guess this project refuses.
|
|
171
|
-
// A disclosed under-report, consistent with Kotlin's marker rule.
|
|
95
|
+
// most-recent-first, no reversal. fidelity "synchronous": an async
|
|
96
|
+
// task's stack ends at the executor's poll, not the logical .awaiter,
|
|
97
|
+
// but nothing in the text says so -- disclosed under-report (Kotlin's
|
|
98
|
+
// marker rule) rather than a fragmentation guess.
|
|
172
99
|
return { fidelity: "synchronous", frames, primaryFrameIndex };
|
|
173
100
|
},
|
|
174
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rust-stack-trace-parser.js","sourceRoot":"","sources":["../src/rust-stack-trace-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rust-stack-trace-parser.js","sourceRoot":"","sources":["../src/rust-stack-trace-parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descryy/runtime-adapter-rust",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Runtime adapter (rust).",
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/descryhq-wq/descry-runtime.git",
|
|
10
|
+
"directory": "packages/adapter-rust"
|
|
11
|
+
},
|
|
7
12
|
"engines": {
|
|
8
13
|
"node": ">=22.5"
|
|
9
14
|
},
|
|
@@ -24,7 +29,7 @@
|
|
|
24
29
|
"build": "tsc -b"
|
|
25
30
|
},
|
|
26
31
|
"dependencies": {
|
|
27
|
-
"@descryy/runtime-contracts": "
|
|
28
|
-
"@descryy/runtime-backend-observation": "
|
|
32
|
+
"@descryy/runtime-contracts": "0.3.1",
|
|
33
|
+
"@descryy/runtime-backend-observation": "0.3.1"
|
|
29
34
|
}
|
|
30
35
|
}
|