Skip to content

cli: implement --trace-env and --trace-env-[js|native]-stack#55604

Merged
nodejs-github-bot merged 5 commits into
nodejs:mainfrom
joyeecheung:trace-env
Nov 27, 2024
Merged

cli: implement --trace-env and --trace-env-[js|native]-stack#55604
nodejs-github-bot merged 5 commits into
nodejs:mainfrom
joyeecheung:trace-env

Conversation

@joyeecheung
Copy link
Copy Markdown
Member

@joyeecheung joyeecheung commented Oct 30, 2024

This implements --trace-env, --trace-env-js-stack and --trace-env-native-stack CLI options that print information about any access to environment variables done in the current Node.js instance to stderr, including:

  • The environment variable reads that Node.js does internally.
  • Writes in the form of process.env.KEY = "SOME VALUE".
  • Reads in the form of process.env.KEY.
  • Definitions in the form of Object.defineProperty(process.env, 'KEY', {...}).
  • Queries in the form of Object.hasOwn(process.env, 'KEY'),
    process.env.hasOwnProperty('KEY') or 'KEY' in process.env.
  • Deletions in the form of delete process.env.KEY.
  • Enumerations inf the form of ...process.env or Object.keys(process.env).

Only the names of the environment variables being accessed are printed. The values are not printed. To print the stack trace of the access, use --trace-env-js-stack and/or --trace-env-native-stack.

$ cat env.js
const foo = process.env.FOO;
process.env.FOO = foo + "foo";

$ out/Release/node --trace-env env.js
[--trace-env] get environment variable "NODE_ICU_DATA"
[--trace-env] get environment variable "OPENSSL_CONF"
[--trace-env] get environment variable "NODE_EXTRA_CA_CERTS"
[--trace-env] get environment variable "NODE_DEBUG_NATIVE"
[--trace-env] get environment variable "NODE_COMPILE_CACHE"
[--trace-env] get environment variable "NODE_NO_WARNINGS"
[--trace-env] get environment variable "NODE_V8_COVERAGE"
[--trace-env] get environment variable "NODE_DEBUG"
[--trace-env] get environment variable "NODE_CHANNEL_FD"
[--trace-env] get environment variable "NODE_UNIQUE_ID"
[--trace-env] get environment variable "HOME"
[--trace-env] get environment variable "NODE_PATH"
[--trace-env] get environment variable "WATCH_REPORT_DEPENDENCIES"
[--trace-env] get environment variable "FOO"
[--trace-env] set environment variable "FOO"
See output of `--trace-env-js-stack`
out/Release/node --trace-env-js-stack env.js
[--trace-env] get environment variable "NODE_ICU_DATA"
[--trace-env] get environment variable "OPENSSL_CONF"
[--trace-env] get environment variable "NODE_EXTRA_CA_CERTS"
[--trace-env] get environment variable "NODE_DEBUG_NATIVE"
[--trace-env] get environment variable "NODE_COMPILE_CACHE"
[--trace-env] get environment variable "NODE_NO_WARNINGS"

----- JavaScript stack trace -----

1: setupWarningHandler (node:internal/process/pre_execution:263:17)
2: prepareExecution (node:internal/process/pre_execution:102:3)
3: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
4: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "NODE_V8_COVERAGE"

----- JavaScript stack trace -----

1: setupCodeCoverage (node:internal/process/pre_execution:333:19)
2: prepareExecution (node:internal/process/pre_execution:107:3)
3: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
4: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "NODE_DEBUG"

----- JavaScript stack trace -----

1: setupDebugEnv (node:internal/process/pre_execution:363:68)
2: prepareExecution (node:internal/process/pre_execution:108:3)
3: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
4: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "NODE_CHANNEL_FD"

----- JavaScript stack trace -----

1: setupChildProcessIpcChannel (node:internal/process/pre_execution:497:19)
2: prepareExecution (node:internal/process/pre_execution:133:5)
3: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
4: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "NODE_UNIQUE_ID"

----- JavaScript stack trace -----

1: initializeClusterIPC (node:internal/process/pre_execution:514:38)
2: prepareExecution (node:internal/process/pre_execution:137:5)
3: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
4: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "HOME"

----- JavaScript stack trace -----

1: node:internal/modules/cjs/loader:1782:57
2: initializeCJS (node:internal/modules/cjs/loader:427:12)
3: initializeCJSLoader (node:internal/process/pre_execution:590:3)
4: setupUserModules (node:internal/process/pre_execution:155:3)
5: prepareExecution (node:internal/process/pre_execution:148:5)
6: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
7: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "NODE_PATH"

----- JavaScript stack trace -----

1: node:internal/modules/cjs/loader:1783:56
2: initializeCJS (node:internal/modules/cjs/loader:427:12)
3: initializeCJSLoader (node:internal/process/pre_execution:590:3)
4: setupUserModules (node:internal/process/pre_execution:155:3)
5: prepareExecution (node:internal/process/pre_execution:148:5)
6: prepareMainThreadExecution (node:internal/process/pre_execution:47:10)
7: node:internal/main/run_main_module:15:19


[--trace-env] get environment variable "WATCH_REPORT_DEPENDENCIES"

----- JavaScript stack trace -----

1: node:internal/modules/cjs/loader:161:63
2: node:internal/util:809:15
3: reportModuleToWatchMode (node:internal/modules/cjs/loader:276:7)
4: node:internal/modules/cjs/loader:1106:5
5: traceSync (node:diagnostics_channel:322:14)
6: wrapModuleLoad (node:internal/modules/cjs/loader:218:24)
7: executeUserEntryPoint (node:internal/modules/run_main:170:5)
8: node:internal/main/run_main_module:36:49


[--trace-env] get environment variable "FOO"

----- JavaScript stack trace -----

1: /Users/joyee/projects/node/env.js:1:25
2: node:internal/modules/cjs/loader:1546:14
3: node:internal/modules/cjs/loader:1698:10
4: node:internal/modules/cjs/loader:1303:32
5: node:internal/modules/cjs/loader:1117:12
6: traceSync (node:diagnostics_channel:322:14)
7: wrapModuleLoad (node:internal/modules/cjs/loader:218:24)
8: executeUserEntryPoint (node:internal/modules/run_main:170:5)
9: node:internal/main/run_main_module:36:49


[--trace-env] set environment variable "FOO"

----- JavaScript stack trace -----

1: /Users/joyee/projects/node/env.js:2:17
2: node:internal/modules/cjs/loader:1546:14
3: node:internal/modules/cjs/loader:1698:10
4: node:internal/modules/cjs/loader:1303:32
5: node:internal/modules/cjs/loader:1117:12
6: traceSync (node:diagnostics_channel:322:14)
7: wrapModuleLoad (node:internal/modules/cjs/loader:218:24)
8: executeUserEntryPoint (node:internal/modules/run_main:170:5)
9: node:internal/main/run_main_module:36:49

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c++ Issues and PRs that require attention from people who are familiar with C++. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. lib / src Issues and PRs related to general changes in the lib or src directory. needs-ci PRs that need a full CI run. notable-change PRs with changes that should be highlighted in changelogs. semver-minor PRs that contain new features and should be released in the next minor version.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants