src: add cli option to preserve env vars on dr · nodejs/node@2e3ca1b

@@ -61,7 +61,8 @@ static void WriteNodeReport(Isolate* isolate,

6161

std::ostream& out,

6262

Local<Value> error,

6363

bool compact,

64-

bool exclude_network = false);

64+

bool exclude_network = false,

65+

bool exclude_env = false);

6566

static void PrintVersionInformation(JSONWriter* writer,

6667

bool exclude_network = false);

6768

static void PrintJavaScriptErrorStack(JSONWriter* writer,

@@ -78,6 +79,7 @@ static void PrintJavaScriptErrorProperties(JSONWriter* writer,

7879

static void PrintNativeStack(JSONWriter* writer);

7980

static void PrintResourceUsage(JSONWriter* writer);

8081

static void PrintGCStatistics(JSONWriter* writer, Isolate* isolate);

82+

static void PrintEnvironmentVariables(JSONWriter* writer);

8183

static void PrintSystemInformation(JSONWriter* writer);

8284

static void PrintLoadedLibraries(JSONWriter* writer);

8385

static void PrintComponentVersions(JSONWriter* writer);

@@ -95,7 +97,8 @@ static void WriteNodeReport(Isolate* isolate,

9597

std::ostream& out,

9698

Local<Value> error,

9799

bool compact,

98-

bool exclude_network) {

100+

bool exclude_network,

101+

bool exclude_env) {

99102

// Obtain the current time and the pid.

100103

TIME_TYPE tm_struct;

101104

DiagnosticFilename::LocalTime(&tm_struct);

@@ -251,6 +254,9 @@ static void WriteNodeReport(Isolate* isolate,

251254

writer.json_arrayend();

252255253256

// Report operating system information

257+

if (exclude_env == false) {

258+

PrintEnvironmentVariables(&writer);

259+

}

254260

PrintSystemInformation(&writer);

255261256262

writer.json_objectend();

@@ -696,8 +702,7 @@ static void PrintResourceUsage(JSONWriter* writer) {

696702

#endif // RUSAGE_THREAD

697703

}

698704699-

// Report operating system information.

700-

static void PrintSystemInformation(JSONWriter* writer) {

705+

static void PrintEnvironmentVariables(JSONWriter* writer) {

701706

uv_env_item_t* envitems;

702707

int envcount;

703708

int r;

@@ -717,7 +722,10 @@ static void PrintSystemInformation(JSONWriter* writer) {

717722

}

718723719724

writer->json_objectend();

725+

}

720726727+

// Report operating system information.

728+

static void PrintSystemInformation(JSONWriter* writer) {

721729

#ifndef _WIN32

722730

static struct {

723731

const char* description;

@@ -917,6 +925,10 @@ std::string TriggerNodeReport(Isolate* isolate,

917925

bool exclude_network = env != nullptr ? env->options()->report_exclude_network

918926

: per_process::cli_options->per_isolate

919927

->per_env->report_exclude_network;

928+

bool exclude_env =

929+

env != nullptr

930+

? env->report_exclude_env()

931+

: per_process::cli_options->per_isolate->per_env->report_exclude_env;

920932921933

report::WriteNodeReport(isolate,

922934

env,

@@ -926,7 +938,8 @@ std::string TriggerNodeReport(Isolate* isolate,

926938

*outstream,

927939

error,

928940

compact,

929-

exclude_network);

941+

exclude_network,

942+

exclude_env);

930943931944

// Do not close stdout/stderr, only close files we opened.

932945

if (outfile.is_open()) {

@@ -980,8 +993,20 @@ void GetNodeReport(Isolate* isolate,

980993

bool exclude_network = env != nullptr ? env->options()->report_exclude_network

981994

: per_process::cli_options->per_isolate

982995

->per_env->report_exclude_network;

983-

report::WriteNodeReport(

984-

isolate, env, message, trigger, "", out, error, false, exclude_network);

996+

bool exclude_env =

997+

env != nullptr

998+

? env->report_exclude_env()

999+

: per_process::cli_options->per_isolate->per_env->report_exclude_env;

1000+

report::WriteNodeReport(isolate,

1001+

env,

1002+

message,

1003+

trigger,

1004+

"",

1005+

out,

1006+

error,

1007+

false,

1008+

exclude_network,

1009+

exclude_env);

9851010

}

98610119871012

// External function to trigger a report, writing to a supplied stream.

@@ -997,8 +1022,20 @@ void GetNodeReport(Environment* env,

9971022

bool exclude_network = env != nullptr ? env->options()->report_exclude_network

9981023

: per_process::cli_options->per_isolate

9991024

->per_env->report_exclude_network;

1000-

report::WriteNodeReport(

1001-

isolate, env, message, trigger, "", out, error, false, exclude_network);

1025+

bool exclude_env =

1026+

env != nullptr

1027+

? env->report_exclude_env()

1028+

: per_process::cli_options->per_isolate->per_env->report_exclude_env;

1029+

report::WriteNodeReport(isolate,

1030+

env,

1031+

message,

1032+

trigger,

1033+

"",

1034+

out,

1035+

error,

1036+

false,

1037+

exclude_network,

1038+

exclude_env);

10021039

}

1003104010041041

} // namespace node