getsentry / getsentry/sentry-python
Demangle Cython __pyx_* symbols in native stack frames
- Ngôn ngữ chính
- Python
- Star
- 2.2k
- Fork
- 669
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 213
Mô tả
Native crash frames generated by Cython-compiled code appear as mangled C
symbols (e.g. `__pyx_pw_6module_3func`) in sentry-native stack traces, making
them unreadable without manual demangling. The Python SDK captures Cython
frames correctly at the Python level (`.pyx` file, line number), but when a
crash occurs in the native layer of a Cython extension, the native stack frames
shown in Sentry are opaque.
**Current behavior**
* Python-level Cython frames (captured by sentry-python via `sys.exc_info()`)
show correct `.pyx` source file and line number
* Native frames from the C code generated by Cython (captured by sentry-native
on crash) show raw mangled symbols: `__pyx_pw_6module_3func_1name`,
`__pyx_f_6module_3ClassName_method`, etc.
* C++ demangling (`__cxa_demangle`) does not apply to Cython's naming scheme
* No Cython-specific demangling exists in sentry-python or the Sentry backend
**Gap**
Cython uses a deterministic, documented symbol naming convention for the C code
it generates. A demangler can reconstruct the original Python-facing name from
a `__pyx_*` symbol:
* `__pyx_pw__` → Python wrapper for `.`
* `__pyx_f___` → C-level function for
`..`
This demangling could be applied as a post-processing step in the
`GnuBacktraceIntegration` or as a standalone `CythonIntegration`, enriching
native frames with human-readable Cython source names before the event is sent
to Sentry.
**Options**
1. Extend `GnuBacktraceIntegration` to detect and demangle `__pyx_*` symbols
in parsed backtrace frames — lowest friction, reuses existing pipeline
2. Add a standalone `CythonIntegration` event processor that post-processes
all native frames across exception and crash events — cleaner separation,
applicable beyond `GnuBacktrace`-formatted strings
3. Implement server-side demangling in the Sentry symbolicator for `__pyx_*`
symbols — transparent to SDK users, but requires changes outside this repo
**References**
* Cython generated C naming conventions: [https://cython.readthedocs.io/en/latest/src/userguide/debugging.html]()
* Existing `GnuBacktraceIntegration`: `sentry_sdk/integrations/gnu_backtrace.py`
Action taken on behalf of Angelo de Voer.
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.