From d5a5b99eafe157080db13f8221ecb64c3a092788 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sat, 30 Mar 2019 23:05:48 -0400 Subject: [PATCH] report: add cwd to report The diagnostic report currently contains command line information, and the environment, which contains the PWD environment variable. This combination covers the majority of cases, but it would be useful to have the result of uv_cwd() as an additional data point. This commit adds that information. PR-URL: https://github.com/nodejs/node/pull/27022 Reviewed-By: Richard Lau Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca --- doc/api/report.md | 1 + src/node_report.cc | 16 ++++++++++++++++ test/common/report.js | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/api/report.md b/doc/api/report.md index a7715751d5761f..5427d3d8329d3b 100644 --- a/doc/api/report.md +++ b/doc/api/report.md @@ -28,6 +28,7 @@ is provided below for reference. "dumpEventTime": "2018-12-21T00:50:11Z", "dumpEventTimeStamp": "1545371411331", "processId": 8974, + "cwd": "/home/nodeuser/project/node", "commandLine": [ "/home/nodeuser/project/node/out/Release/node", "--experimental-report", diff --git a/src/node_report.cc b/src/node_report.cc index f9cf9211434bfc..3ca120457f113d 100644 --- a/src/node_report.cc +++ b/src/node_report.cc @@ -18,6 +18,14 @@ #include #include #include +#include // PATH_MAX + +#ifdef _WIN32 +/* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */ +#define PATH_MAX_BYTES (MAX_PATH * 4) +#else +#define PATH_MAX_BYTES (PATH_MAX) +#endif #ifndef _WIN32 extern char** environ; @@ -213,6 +221,14 @@ static void WriteNodeReport(Isolate* isolate, // Report native process ID writer.json_keyvalue("processId", pid); + { + // Report the process cwd. + char buf[PATH_MAX_BYTES]; + size_t cwd_size = sizeof(buf); + if (uv_cwd(buf, &cwd_size) == 0) + writer.json_keyvalue("cwd", buf); + } + // Report out the command line. if (!node::per_process::cli_options->cmdline.empty()) { writer.json_arraystart("commandLine"); diff --git a/test/common/report.js b/test/common/report.js index a9c1d038d22bd5..f3942c5d298abf 100644 --- a/test/common/report.js +++ b/test/common/report.js @@ -63,7 +63,7 @@ function _validateContent(data) { 'nodejsVersion', 'wordSize', 'arch', 'platform', 'componentVersions', 'release', 'osName', 'osRelease', 'osVersion', 'osMachine', 'host', 'glibcVersionRuntime', - 'glibcVersionCompiler']; + 'glibcVersionCompiler', 'cwd']; checkForUnknownFields(header, headerFields); assert.strictEqual(typeof header.event, 'string'); assert.strictEqual(typeof header.trigger, 'string'); @@ -76,6 +76,7 @@ function _validateContent(data) { assert(String(+header.dumpEventTimeStamp), header.dumpEventTimeStamp); assert(Number.isSafeInteger(header.processId)); + assert.strictEqual(typeof header.cwd, 'string'); assert(Array.isArray(header.commandLine)); header.commandLine.forEach((arg) => { assert.strictEqual(typeof arg, 'string');