Skip to content

Commit 4fabd02

Browse files
committed
pythongh-91048: Add filename and line number to external inspection routines
1 parent 1d9406e commit 4fabd02

File tree

3 files changed

+337
-40
lines changed

3 files changed

+337
-40
lines changed

Lib/asyncio/tools.py

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def _index(result):
2727
for tid, tname, awaited in tasks:
2828
id2name[tid] = tname
2929
for stack, parent_id in awaited:
30+
stack = [elem[0] if isinstance(elem, tuple) else elem for elem in stack]
3031
awaits.append((parent_id, stack, tid))
3132
return id2name, awaits
3233

@@ -151,6 +152,7 @@ def build_task_table(result):
151152
]
152153
)
153154
for stack, awaiter_id in awaited:
155+
stack = [elem[0] if isinstance(elem, tuple) else elem for elem in stack]
154156
coroutine_chain = " -> ".join(stack)
155157
awaiter_name = id2name.get(awaiter_id, "Unknown")
156158
table.append(

Lib/test/test_external_inspection.py

+28-14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import importlib
55
import sys
66
import socket
7+
from asyncio import staggered
78
from unittest.mock import ANY
89
from test.support import os_helper, SHORT_TIMEOUT, busy_retry, requires_gil_enabled
910
from test.support.script_helper import make_script
@@ -90,10 +91,10 @@ def foo():
9091

9192

9293
expected_stack_trace = [
93-
'foo',
94-
'baz',
95-
'bar',
96-
'<module>'
94+
('foo', script_name, 15),
95+
('baz', script_name, 11),
96+
('bar', script_name, 9),
97+
('<module>', script_name, 17),
9798
]
9899
self.assertEqual(stack_trace, expected_stack_trace)
99100

@@ -185,7 +186,12 @@ def new_eager_loop():
185186

186187
root_task = "Task-1"
187188
expected_stack_trace = [
188-
['c5', 'c4', 'c3', 'c2'],
189+
[
190+
('c5', script_name, 11),
191+
('c4', script_name, 15),
192+
('c3', script_name, 18),
193+
('c2', script_name, 21),
194+
],
189195
'c2_root',
190196
[
191197
[['_aexit', '__aexit__', 'main'], root_task, []],
@@ -258,7 +264,11 @@ async def main():
258264
stack_trace[2].sort(key=lambda x: x[1])
259265

260266
expected_stack_trace = [
261-
['gen_nested_call', 'gen', 'main'], 'Task-1', []
267+
[('gen_nested_call', script_name, 11),
268+
('gen', script_name, 17),
269+
('main', script_name, 20)],
270+
'Task-1',
271+
[]
262272
]
263273
self.assertEqual(stack_trace, expected_stack_trace)
264274

@@ -326,9 +336,10 @@ async def main():
326336
# sets are unordered, so we want to sort "awaited_by"s
327337
stack_trace[2].sort(key=lambda x: x[1])
328338

329-
expected_stack_trace = [
330-
['deep', 'c1'], 'Task-2', [[['main'], 'Task-1', []]]
331-
]
339+
expected_stack_trace = [[('deep', script_name, 12),
340+
('c1', script_name, 16)],
341+
'Task-2',
342+
[[['main'], 'Task-1', []]]]
332343
self.assertEqual(stack_trace, expected_stack_trace)
333344

334345
@skip_if_not_supported
@@ -398,10 +409,13 @@ async def main():
398409
# sets are unordered, so we want to sort "awaited_by"s
399410
stack_trace[2].sort(key=lambda x: x[1])
400411

401-
expected_stack_trace = [
402-
['deep', 'c1', 'run_one_coro'],
403-
'Task-2',
404-
[[['staggered_race', 'main'], 'Task-1', []]]
412+
expected_stack_trace = [[
413+
('deep', script_name, 12),
414+
('c1', script_name, 16),
415+
('staggered_race.<locals>.run_one_coro', staggered.__file__, 127)
416+
],
417+
'Task-2',
418+
[[['staggered_race', 'main'], 'Task-1', []]]
405419
]
406420
self.assertEqual(stack_trace, expected_stack_trace)
407421

@@ -548,7 +562,7 @@ async def main():
548562
"Test only runs on Linux with process_vm_readv support")
549563
def test_self_trace(self):
550564
stack_trace = get_stack_trace(os.getpid())
551-
self.assertEqual(stack_trace[0], "test_self_trace")
565+
self.assertEqual(stack_trace[0], ('TestGetStackTrace.test_self_trace', __file__, 564))
552566

553567
if __name__ == "__main__":
554568
unittest.main()

0 commit comments

Comments
 (0)