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');