This debugger extension provides visualizations for Python objects and stacktraces when debugging the CPython interpreter. It helps with live debugging and post-mortem analysis of dump files.
The goal of this project is to provide a similar debugging experience in WinDbg/CDB/NTSD as already exists in GDB.
Currently, the extension is tested against 32bit and 64bit builds of Python versions 2.7, 3.3, 3.4, 3.5, and 3.6.
Displays the Python callstack for the current thread.
0:000> !pystack
Thread 0:
File "C:\Python36\lib\threading.py", line 1072, in _wait_for_tstate_lock
File "C:\Python36\lib\threading.py", line 1056, in join
File "scripts\win32debug.py", line 148, in _launch_and_wait
File "scripts\win32debug.py", line 175, in dump_process
File ".\fibonacci_test.py", line 18, in recursive_fib
File ".\fibonacci_test.py", line 18, in recursive_fib
File ".\fibonacci_test.py", line 18, in recursive_fib
File ".\fibonacci_test.py", line 28, in <module>
Use ~*e!pystack to display the Python stack for all threads.
Displays the reference count, type, and value of a Python object, using similar formatting to Python's builtin repr() function.
0:000> !pyobj autoInterpreterState->tstate_head->frame->f_code
PyCodeObject at address: 000001fc`b6a87f60
RefCount: 2
Type: code
Repr: <code object, file "scripts\win32debug.py", line 120>
0:000> !pyobj autoInterpreterState->tstate_head->frame->f_globals
PyDictObject at address: 000001fc`b6ba6bd0
RefCount: 15
Type: dict
Repr: {
'__name__': 'win32debug',
'__doc__': 'Wrappers around various Win32 APIs debugging.',
# ...
}