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

f1f2 中的第一个 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中的条件断点有问题造成这种现象。