Python interface to c++filt / abi::__cxa_demangle
Project description
Demangling C++ symbols in Python / interface to abi::__cxa_demangle
Usage
Install:
pip install cxxfilt
Use demangle to demangle a C++ mangled symbol name:
>>> import cxxfilt >>> cxxfilt.demangle('_ZNSt22condition_variable_anyD2Ev') 'std::condition_variable_any::~condition_variable_any()'
Non-mangled name will be kept intact:
>>> cxxfilt.demangle('main') 'main'
To demangle an internal symbol, use external_only=False:
>>> cxxfilt.demangle('N3foo12BarExceptionE') 'N3foo12BarExceptionE' >>> cxxfilt.demangle('N3foo12BarExceptionE', external_only=False) 'foo::BarException'
Invalid mangled names will trigger an InvalidName exception:
>>> cxxfilt.demangle('_ZQQ') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/path/to/python-cxxfilt/cxxfilt/__init__.py", line 77, in demangle return demangleb(mangled_name.encode()).decode() File "/path/to/python-cxxfilt/cxxfilt/__init__.py", line 69, in demangleb raise InvalidName(mangled_name) cxxfilt.InvalidName: b'_ZQQ'
Use demangleb to demangle name in bytes:
>>> cxxfilt.demangleb(b'_ZNSt22condition_variable_anyD2Ev') b'std::condition_variable_any::~condition_variable_any()'
Make custom Demangler objects to use specific C/C++ libraries:
>>> from ctypes.util import find_library >>> >>> d = cxxfilt.Demangler(find_library('c'), find_library('stdc++')) >>> d <Demangler libc='libc.so.6' libcxx='libstdc++.so.6'> >>> >>> d = cxxfilt.Demangler(find_library('c'), find_library('c++')) >>> d <Demangler libc='libc.so.6' libcxx='libc++.so.1'> >>> d.demangle('_ZNSt22condition_variable_anyD2Ev') 'std::condition_variable_any::~condition_variable_any()'
Supported environments
Python 3.6 or greater.
Tested on Linux and macOS (see github actions). Should work on unix systems with libc and libc++/libstdc++.
Will not work on Windows (PR welcome though).
For Python 2.7 please use cxxfilt version < 0.3.
Changelog
0.3.0
Added Demangler class.
import cxxfilt no longer fails when there are no C/C++ libraries available. To check whether the default demangler is valid, use the expression: not isinstance(cxxfilt.default_demangler, cxxfilt.DeferedErrorDemangler).
Testing
run in shell:
pytest
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cxxfilt-0.3.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 774e85a8d0157775ed43276d89397d924b104135762d86b3a95f81f203094e07 |
|
MD5 | aa14c9c709185a55fe6923c6d441a09d |
|
BLAKE2b-256 | 1c2923572dc59bf4a3984fe3c5fc242f73be916785ee93387dd95c972dbf584e |