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 <riclau@uk.ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
pull/27022/head
cjihrig 2019-03-30 23:05:48 -04:00
parent 1944265678
commit d5a5b99eaf
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
3 changed files with 19 additions and 1 deletions

View File

@ -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",

View File

@ -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");

View File

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