Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32.4k
Closed
Description
trace
doesn't print newline character when handling line event if it can't fetch source line that corresponds to a current frame, e. g. in case of frozen modules (or in any other case whenframe.f_code.co_filename
points to a non-existing file).
Example:
importnumpyasnpx=np.array([1,2,3])
./python -m trace --trace example.py
--- modulename: example, funcname: <module>example.py(2): import signal --- modulename: _bootstrap, funcname: _find_and_load<frozen importlib._bootstrap>(1299): <frozen importlib._bootstrap>(1300): <frozen importlib._bootstrap>(1302): --- modulename: _bootstrap, funcname: __init__<frozen importlib._bootstrap>(325): <frozen importlib._bootstrap>(326): --- modulename: _bootstrap, funcname: __enter__<frozen importlib._bootstrap>(329): --- modulename: _bootstrap, funcname: _get_module_lock<frozen importlib._bootstrap>(344): <frozen importlib._bootstrap>(345): <frozen importlib._bootstrap>(346): <frozen importlib._bootstrap>(347): <frozen importlib._bootstrap>(348): <frozen importlib._bootstrap>(349): <frozen importlib._bootstrap>(351): <frozen importlib._bootstrap>(352): <frozen importlib._bootstrap>(355): --- modulename: _bootstrap, funcname: __init__<frozen importlib._bootstrap>(165): <frozen importlib._bootstrap>(166): <frozen importlib._bootstrap>(169): <frozen importlib._bootstrap>(173): <frozen importlib._bootstrap>(184): <frozen importlib._bootstrap>(198): <frozen importlib._bootstrap>(357): <frozen importlib._bootstrap>(368): <frozen importlib._bootstrap>(370): <frozen importlib._bootstrap>(372): <frozen importlib._bootstrap>(330): --- modulename: _bootstrap, funcname: acquire<frozen importlib._bootstrap>(222): <frozen importlib._bootstrap>(223): --- modulename: _bootstrap, funcname: __init__<frozen importlib._bootstrap>(71): <frozen importlib._bootstrap>(72): --- modulename: _bootstrap, funcname: __enter__<frozen importlib._bootstrap>(82): <frozen importlib._bootstrap>(83): <frozen importlib._bootstrap>(224): <frozen importlib._bootstrap>(228): <frozen importlib._bootstrap>(229): <frozen importlib._bootstrap>(236): <frozen importlib._bootstrap>(237): <frozen importlib._bootstrap>(238): <frozen importlib._bootstrap>(228): <frozen importlib._bootstrap>(223): --- modulename: _bootstrap, funcname: __exit__<frozen importlib._bootstrap>(87): <frozen importlib._bootstrap>(1303): <frozen importlib._bootstrap>(1304): <frozen importlib._bootstrap>(1305): --- modulename: _bootstrap, funcname: _find_and_load_unlocked<frozen importlib._bootstrap>(1250): <frozen importlib._bootstrap>(1251): <frozen importlib._bootstrap>(1252): <frozen importlib._bootstrap>(1253): <frozen importlib._bootstrap>(1267): --- modulename: _bootstrap, funcname: _find_spec<frozen importlib._bootstrap>(1185): <frozen importlib._bootstrap>(1186): <frozen importlib._bootstrap>(1191): <frozen importlib._bootstrap>(1197): <frozen importlib._bootstrap>(1198): <frozen importlib._bootstrap>(1199): --- modulename: _bootstrap, funcname: __enter__...numeric.py(205): a = empty(shape, dtype, order)numeric.py(206): multiarray.copyto(a, 1, casting='unsafe') --- modulename: overrides, funcname: copyto<__array_function__ internals>(179): <__array_function__ internals>(180): --- modulename: multiarray, funcname: copytomultiarray.py(1127): return (dst, src, where)<__array_function__ internals>(200): <__array_function__ internals>(201): <__array_function__ internals>(200): numeric.py(207): return a__init__.py(348): if not abs(x.dot(x) - float32(2.0)) < 1e-5:__init__.py(359): del _sanity_check__init__.py(361): def _mac_os_check():...
It happens becauseTrace
object'slocaltrace_trace
andlocaltrace_trace_and_count
methods expect the call tolinecache.getline
to always return source line with newline at the end of it.
Lines 566 to 577 inbf0b8a9
deflocaltrace_trace(self,frame,why,arg): | |
ifwhy=="line": | |
# record the file name and line number of every trace | |
filename=frame.f_code.co_filename | |
lineno=frame.f_lineno | |
ifself.start_time: | |
print('%.2f'% (_time()-self.start_time),end=' ') | |
bname=os.path.basename(filename) | |
print("%s(%d): %s"% (bname,lineno, | |
linecache.getline(filename,lineno)),end='') | |
returnself.localtrace |
Confirmed on 3.11.1 and 3.12.0a7+(63842bd).
I'll do a PR with possible fix.
Linked PRs
- gh-103956: fix
trace
output in case of missing source line #103958 - [3.12] gh-103956: Fix
trace
output in case of missing source line (GH-103958) #118832 - [3.11] gh-103956: Fix
trace
output in case of missing source line (GH-103958) #118833 - [3.13] gh-103956: Fix
trace
output in case of missing source line (GH-103958) #118834