Skip to content

Conversation

@BridgeAR
Copy link
Collaborator

This increases debug information for errors by inspecting the whole error and sending it as stack. That provides a) better output for errors by using util.inspect for the stack instead of the native one. That provides for example better error names. b) This improves the performance for one error in serverless by preventing to create stack frames that are not needed. c) it shows all additional properties that might exist on an error as stack output. That should be helpful for debugging issues.

To limit the output of extra properties to a minimum, only one level is inspected.

Fixes: #6366

This increases debug information for errors by inspecting the whole
error and sending it as stack. That provides a) better output for
errors by using util.inspect for the stack instead of the native
one. That provides for example better error names. b) This improves
the performance for one error in serverless by preventing to create
stack frames that are not needed. c) it shows all additional
properties that might exist on an error as stack output. That
should be helpful for debugging issues.

To limit the output of extra properties to a minimum, only one
level is inspected.

Fixes: #6366
@github-actions
Copy link

github-actions bot commented Oct 28, 2025

Overall package size

Self size: 13.15 MB
Deduped: 115.95 MB
No deduping: 118.16 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.3.0 | 20.73 MB | 20.74 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.11.1 | 9.96 MB | 10.34 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.82 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @opentelemetry/resources | 1.9.1 | 306.54 kB | 1.74 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api-logs | 0.207.0 | 201.39 kB | 1.42 MB | | @opentelemetry/api | 1.9.0 | 1.22 MB | 1.22 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.15.0 | 127.66 kB | 856.24 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | @datadog/openfeature-node-server | 0.1.0-preview.12 | 95.11 kB | 401.68 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@codecov
Copy link

codecov bot commented Oct 28, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.98%. Comparing base (90b7c96) to head (68ef1d1).
⚠️ Report is 14 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6776      +/-   ##
==========================================
- Coverage   84.06%   83.98%   -0.08%     
==========================================
  Files         506      505       -1     
  Lines       21212    21246      +34     
==========================================
+ Hits        17831    17843      +12     
- Misses       3381     3403      +22     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@datadog-official
Copy link

datadog-official bot commented Oct 28, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 68ef1d1 | Docs | Was this helpful? Give us feedback!

@pr-commenter
Copy link

pr-commenter bot commented Oct 28, 2025

Benchmarks

Benchmark execution time: 2025-10-28 23:04:41

Comparing candidate commit 68ef1d1 in PR branch BridgeAR/2025-10-28-add-cause-to-stack with baseline commit 90b7c96 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1604 metrics, 66 unstable metrics.

@BridgeAR BridgeAR marked this pull request as ready for review October 28, 2025 22:52
@BridgeAR BridgeAR requested review from a team as code owners October 28, 2025 22:52
@BridgeAR BridgeAR requested review from khanayan123 and removed request for a team October 28, 2025 22:52
expect(traces[0][0].meta).to.have.property(ERROR_TYPE, error.name)
expect(traces[0][0].meta).to.have.property(ERROR_MESSAGE, error.message || error.code)
expect(traces[0][0].meta).to.have.property(ERROR_STACK, error.stack)
expect(traces[0][0].meta).to.have.property(ERROR_STACK, util.inspect(error, { depth: 0 }))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if error is not an actual error object?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See https://github.com/DataDog/dd-trace-js/pull/6776/files#diff-5490d33b84fdf38d10fd4f4460c01af269e82e9a95d9bda16aef99b9353102b7R89-R97

We check for it having a message property or if it is an instance of error to determine if we add the tags.
The object will be serialized as a whole, if it contains a stack property. If it would be a object with a message and a stack property, that would be serialized instead of only showing the stack property. That in itself seems beneficial for users one way or the other. If it does not have a stack property, that is kept as is.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's not an error we should properly extract the existing stack as it was done before, and only use util.inspect for errors since it special cases them to get the stack with additional metadata.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I discussed it with error tracking and I am going to handle it as separate properties for now.
They said we could have a look how it would be on staging, while it will likely break a couple of existing pretty printing.

So I am marking it as draft for now.

@BridgeAR BridgeAR marked this pull request as draft October 31, 2025 15:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE]: Support for cause in error stack

3 participants