Visual Studio 代码中的条件断点
Conditional breakpoints in Visual Studio Code
我在同一目录中有以下两个 python 文件:
main.py
from module import f1
f1()
module.py
import traceback
def f1():
print('f1')
print(traceback.extract_stack()[-1].filename)
print(traceback.extract_stack()[-2].filename)
f2()
def f2():
print('f2')
print(traceback.extract_stack()[-1].filename)
print(traceback.extract_stack()[-2].filename)
我在目录中启动 VSCode 并使用以下表达式设置条件断点:
traceback.extract_stack()[-2].filename != traceback.extract_stack()[-1].filename
在 f1
和 f2
中的第一个 print
语句。
main.py的运行打印出来:
f1
c:\Users\...\tmp\pythonTest-breakpoint\module.py
c:\Users\...\tmp\pythonTest-breakpoint\main.py
f2
c:\Users\...\tmp\pythonTest-breakpoint\module.py
c:\Users\...\tmp\pythonTest-breakpoint\module.py
两个断点都触发了。
为什么不满足条件就触发了f2的断点?
来自教程 debug in vscode,它说:
表达式条件:只要表达式的计算结果为true,就会命中断点。
表达式的值决定代码在当前断点调试时是暂停还是跳过,对代码输出没有影响。
关于你的问题,你认为表达式的值在 print("f2")
处为假,但事实是断点机制将其视为真,因此触发了断点:
我也把表达式的值改成了False并且f2()中的断点也被触发了,所以可能vscode中的条件断点有问题造成这种现象。
我在同一目录中有以下两个 python 文件:
main.py
from module import f1
f1()
module.py
import traceback
def f1():
print('f1')
print(traceback.extract_stack()[-1].filename)
print(traceback.extract_stack()[-2].filename)
f2()
def f2():
print('f2')
print(traceback.extract_stack()[-1].filename)
print(traceback.extract_stack()[-2].filename)
我在目录中启动 VSCode 并使用以下表达式设置条件断点:
traceback.extract_stack()[-2].filename != traceback.extract_stack()[-1].filename
在 f1
和 f2
中的第一个 print
语句。
main.py的运行打印出来:
f1
c:\Users\...\tmp\pythonTest-breakpoint\module.py
c:\Users\...\tmp\pythonTest-breakpoint\main.py
f2
c:\Users\...\tmp\pythonTest-breakpoint\module.py
c:\Users\...\tmp\pythonTest-breakpoint\module.py
两个断点都触发了。
为什么不满足条件就触发了f2的断点?
来自教程 debug in vscode,它说:
表达式条件:只要表达式的计算结果为true,就会命中断点。
表达式的值决定代码在当前断点调试时是暂停还是跳过,对代码输出没有影响。
关于你的问题,你认为表达式的值在 print("f2")
处为假,但事实是断点机制将其视为真,因此触发了断点:
我也把表达式的值改成了False并且f2()中的断点也被触发了,所以可能vscode中的条件断点有问题造成这种现象。