pyOCD
pyOCD copied to clipboard
Faulthandler catches and backtraces python segfaults.
This is really helpful to get an instant backtrack in case of python crash. Python crash may be caused by invalid system dependencies and many more. Such situation is really hard to debug. This solution gives hint at glance.
DOC: https://docs.python.org/dev/library/faulthandler.html
Signed-off-by: Tomasz 'CeDeROM' CEDRO [email protected]
Here is an example faulthandler catch of libusb related python crash:
(venv37zephyr) pyocd --version
0.28.1.dev97+dirty
(venv37zephyr) pyocd help
usage: pyocd [-h] [-V] [--help-options] ...
pyocd: error: argument : invalid choice: 'help' (choose from 'commander', 'cmd', 'erase', 'flash', 'reset', 'gdbserver', 'gdb', 'json', 'list', 'pack', 'server')
(venv37zephyr) pyocd list
Fatal Python error: Segmentation fault
Current thread 0x0000000800a3a000 (most recent call first):
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/usb/backend/libusb1.py", line 611 in __init__
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/usb/backend/libusb1.py", line 644 in __iter__
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/usb/core.py", line 1280 in device_iter
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/probe/pydapaccess/interface/pyusb_v2_backend.py", line 184 in get_all_connected_interfaces
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/probe/pydapaccess/dap_access_cmsis_dap.py", line 68 in _get_interfaces
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/probe/pydapaccess/dap_access_cmsis_da
p.py", line 471 in get_connected_devices
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/probe/cmsis_dap_probe.py", line 73 in get_all_connected_probes
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/probe/aggregator.py", line 64 in get_all_connected_probes
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/core/helpers.py", line 82 in get_all_connected_probes
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/core/helpers.py", line 109 in list_co
nnected_probes
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/__main__.py", line 462 in do_list
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/__main__.py", line 402 in run
File "/home/cd/usr/local/venv37zephyr/lib/python3.7/site-packages/pyocd-0.28.1.dev97+dirty-py3.7.egg/pyocd/__main__.py", line 931 in main
File "/home/cd/usr/local/venv37zephyr/bin/pyocd", line 11 in <module>
Segmentation fault
Hey @flit did/would you have a moment to see if that change impacts performance or anything else in a bad way? Except obvious advantages it would be nice to know the downsides :-)
@cederom Apologies! I've fallen behind on pyocd after getting focused on DAPLink during the holiday, and now I'm trying to catch up after getting back to work.