探针输出格式


🌐 Probe output format

当探测会话结束时,探测过程会打印所有探测命中和结果的最终报告。

🌐 When the probe session ends, the probing process prints a final report of all the probe hits and results.

考虑这个脚本:

🌐 Consider this script:

// cli.js
let maxRSS = 0;
for (let i = 0; i < 2; i++) {
 const { rss } = process.memoryUsage();
 maxRSS = Math.max(maxRSS, rss);
} 

没有 --json,默认情况下输出将以人类可读的文本格式打印:

🌐 Without --json, by default the output is printed in a human-readable text format:

$ node inspect --probe cli.js:5 --expr 'rss' cli.js
Hit 1 at file:///path/to/cli.js:5:3
 rss = 54935552
Hit 2 at file:///path/to/cli.js:5:3
 rss = 55083008
Completed 

传递给 --probe 的原始 <file>:<line>[:<col>] 可能会被解析到不同的位置以确保它可暂停,或者它可以匹配多个已加载的脚本,因此实际的评估位置有助于消除结果的歧义。

原始结果会直接打印,而对象和数组在可用时会使用 Chrome 开发者工具协议预览数据。其他非原始值会回退到 Chrome 开发者工具协议 description 字符串。表达式失败会记录为 [error] ... 行,并且不会导致整体会话失败。如果需要更丰富的文本格式,可以将表达式封装在 JSON.stringify(...)util.inspect(...) 中。

🌐 Primitive results are printed directly, while objects and arrays use Chrome DevTools Protocol preview data when available. Other non-primitive values fall back to the Chrome DevTools Protocol description string. Expression failures are recorded as [error] ... lines and do not fail the overall session. If richer text formatting is needed, wrap the expression in JSON.stringify(...) or util.inspect(...).

当使用 --json 时,输出形状如下:

🌐 When --json is used, the output shape looks like this:

$ node inspect --json --probe cli.js:5 --expr 'rss' cli.js
{"v":2,"probes":[{"expr":"rss","target":{"suffix":"cli.js","line":5}}],"results":[{"probe":0,"event":"hit","hit":1,"location":{"url":"file:///path/to/cli.js","line":5,"column":3},"result":{"type":"number","value":55443456,"description":"55443456"}},{"probe":0,"event":"hit","hit":2,"location":{"url":"file:///path/to/cli.js","line":5,"column":3},"result":{"type":"number","value":55574528,"description":"55574528"}},{"event":"completed"}]} 
{
 "v": 2, // Probe JSON schema version.
 "probes": [
 {
 "expr": "rss", // The expression paired with --probe.
 "target": {
 // The user's probe specification. `suffix` is the raw <file> passed
 // to --probe and is matched as a path-separator-anchored suffix
 // against every loaded script's URL. `column` is present only if the
 // user supplied `:col`. The actual evaluation location may differ
 // from the target and will be reported in each hit's `location` field.
 "suffix": "cli.js",
 "line": 5
 }
 }
 ],
 "results": [
 {
 "probe": 0, // Index into probes[].
 "event": "hit", // Hit events are recorded in observation order.
 "hit": 1, // 1-based hit count for this probe.
 "location": {
 // The actual location where the execution is paused to evaluate
 // the expression of the probe. This may differ from the probe's
 // target due to pausability adjustments or multiple matches.
 "url": "file:///path/to/cli.js",
 "line": 5,
 "column": 3
 },
 "result": {
 "type": "number",
 "value": 55443456,
 "description": "55443456"
 }
 // If the expression throws, "error" is present instead of "result".
 },
 {
 "probe": 0,
 "event": "hit",
 "hit": 2,
 "location": { "url": "file:///path/to/cli.js", "line": 5, "column": 3 },
 "result": {
 "type": "number",
 "value": 55574528,
 "description": "55574528"
 }
 },
 {
 "event": "completed"
 // The final entry is always a terminal event, for example:
 // 1. { "event": "completed" }
 // 2. { "event": "miss", "pending": [0, 1] }
 // 3. {
 // "event": "timeout",
 // "pending": [0],
 // "error": {
 // "code": "probe_timeout",
 // "message": "Timed out after 30000ms waiting for probes: app.js:10"
 // }
 // }
 // 4. {
 // "event": "error",
 // "pending": [0],
 // "error": {
 // "code": "probe_target_exit",
 // "exitCode": 1,
 // "stderr": "[Error: boom]",
 // "message": "Target exited with code 1 before probes: app.js:10"
 // }
 // }
 }
 ]
} 

AltStyle によって変換されたページ (->オリジナル) /