Skip to content

Commit 564663a

Browse files
committed
Fill in a column number for a breakpoint
1 parent 43254f0 commit 564663a

3 files changed

Lines changed: 15 additions & 9 deletions

File tree

trepan/lib/stack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,14 @@ def get_column_start_from_frame(frame: FrameType) -> int:
9090
return get_column_start_from_code(frame.f_code, frame.f_lasti)
9191

9292

93-
def get_column_start_from_code(code: CodeType, f_lasti: int) -> int:
93+
def get_column_start_from_code(code: CodeType, code_offset: int) -> int:
9494
"""
9595
Given a code object, return the start column for that
9696
frame. (The line number is found in frame.f_lineno).
9797
If we can't find a column number, return -1.
9898
"""
9999
co_positions = code.co_positions()
100-
instruction_number = f_lasti // 2
100+
instruction_number = code_offset // 2
101101
position_list = list(co_positions)
102102
position_tuple = position_list[instruction_number]
103103
if position_tuple is not None:

trepan/processor/cmdbreak.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from dis import findlinestarts
1919
from pyficache import code_line_info
2020
from trepan.misc import wrapped_lines, pretty_modfunc_name
21+
from trepan.lib.stack import get_column_start_from_code
2122
from trepan.processor.parse.semantics import build_bp_expr
2223
from trepan.processor.parse.parser import LocationError
2324
from trepan.processor.parse.scanner import ScannerError
@@ -52,7 +53,7 @@ def set_break(
5253
if isinstance(func_or_code, str):
5354
func_or_code = code_map.get(func_or_code, func_or_code)
5455
if not line_info:
55-
linestarts = dict(findlinestarts(cmd_obj.proc.curframe.f_code))
56+
linestarts = dict(findlinestarts(cmd_obj.curframe.f_code))
5657
if line_number not in linestarts.values():
5758
part1 = f"File {cmd_obj.core.filename(filename)}"
5859
msg = wrapped_lines(
@@ -102,18 +103,23 @@ def set_break(
102103
)
103104
cmd_obj.msg(msg)
104105
else:
106+
code = None
105107
if hasattr(func_or_code, "co_name"):
108+
code = func_or_code
106109
code_name = func_or_code.co_name
107110
if not code_name.startswith("<"):
108111
code_name += "()"
109112
func_str = f" in {code_name}"
110113
else:
111114
func_str = ""
112115
if bp.column is not None:
113-
# Adjust 0-origin to 1-origin column numbers
114-
column_str = f", column {bp.column + 1}"
116+
column_str = f", column {bp.column}"
115117
else:
116118
column_str = ""
119+
if offset is not None and offset >= 0:
120+
if code is not None:
121+
column_start = get_column_start_from_code(code, offset)
122+
column_str = f", column {column_start}"
117123

118124
part1 = (f"Breakpoint {bp.number} set at line "
119125
f"{line_number}{column_str}{func_str} of file")
@@ -196,15 +202,15 @@ def parse_break_cmd(proc, args):
196202
cmdproc.setup()
197203
# FIXME: we should not need ot set setting
198204
cmdproc.settings = d.settings
199-
set_break(cmdproc, "set_break", __file__, 50, True, False, [])
205+
set_break(cmdproc, "set_break", __file__, 51, True, False, [])
200206
for cmd in (
201207
"break '''c:\\tmp\\foo.bat''':1",
202208
'break """/Users/My Documents/foo.py""":2',
203209
"break",
204210
"break 10",
205211
"break if True",
206212
f"break {__file__}:5",
207-
f"break {__file__}:{cmdproc.frame.f_line_number}",
213+
f"break {__file__}:{cmdproc.frame.f_lineno}",
208214
"break set_break()",
209215
"break 4 if i==5",
210216
"break cmdproc.setup()",

trepan/processor/command/break.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ class BreakCommand(DebuggerCommand):
7474
def run(self, args):
7575
force = True if args[0][-1] == "!" else False
7676

77-
(func, filename, lineno, condition, offset) = parse_break_cmd(self.proc, args)
77+
(func, filename, line_number, condition, offset) = parse_break_cmd(self.proc, args)
7878
if not (func is None and filename is None):
7979
set_break(
8080
self,
8181
func,
8282
filename,
83-
lineno,
83+
line_number,
8484
condition,
8585
False,
8686
args,

0 commit comments

Comments
 (0)