summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/report.md1
-rw-r--r--src/node_report.cc16
-rw-r--r--test/common/report.js3
3 files changed, 19 insertions, 1 deletions
diff --git a/doc/api/report.md b/doc/api/report.md
index a7715751d5..5427d3d832 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 f9cf921143..3ca120457f 100644
--- a/src/node_report.cc
+++ b/src/node_report.cc
@@ -18,6 +18,14 @@
#include <atomic>
#include <fstream>
#include <iomanip>
+#include <climits> // 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 a9c1d038d2..f3942c5d29 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');