Skip to content

Commit 3823aba

Browse files
authored
Fix problem with lineno being none when generating traceback (#1750)
* Fix problem with lineno being none when generating traceback Fixes #1745 * Improve multiline statement handling in stack summary
1 parent f4ba976 commit 3823aba

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,12 +1523,22 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit
15231523
if IS_PY311_OR_GREATER:
15241524
stack_summary = traceback.StackSummary()
15251525
for filename_in_utf8, lineno, method_name, line_text, line_col_info in frames[-max_frames:]:
1526-
frame_summary = traceback.FrameSummary(filename_in_utf8, lineno, method_name, line=line_text)
15271526
if line_col_info is not None:
1528-
frame_summary.end_lineno = line_col_info.end_lineno
1529-
frame_summary.colno = line_col_info.colno
1530-
frame_summary.end_colno = line_col_info.end_colno
1531-
stack_summary.append(frame_summary)
1527+
# End line might mean that we have a multiline statement.
1528+
if line_col_info.end_lineno is not None and lineno < line_col_info.end_lineno:
1529+
line_text = "\n".join(linecache.getlines(filename_in_utf8)[lineno : line_col_info.end_lineno + 1])
1530+
frame_summary = traceback.FrameSummary(
1531+
filename_in_utf8,
1532+
lineno,
1533+
method_name,
1534+
line=line_text,
1535+
end_lineno=line_col_info.end_lineno,
1536+
colno=line_col_info.colno,
1537+
end_colno=line_col_info.end_colno)
1538+
stack_summary.append(frame_summary)
1539+
else:
1540+
frame_summary = traceback.FrameSummary(filename_in_utf8, lineno, method_name, line=line_text)
1541+
stack_summary.append(frame_summary)
15321542

15331543
stack_str = "".join(stack_summary.format())
15341544

0 commit comments

Comments
 (0)