getsentry / getsentry/sentry-python

Demangle Cython __pyx_* symbols in native stack frames

Ouverte
#6,500 3 commentaires 0 réactions 1 personne assignée Réclamée par @alexander-alderman-webb Voir sur GitHub
2. High Feature Python
Langage dominant
Python
Étoiles
2.2k
Forks
669
Merge moyen
1 j 1 h
PR mergées (30 j)
213

Description

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.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.