我有几次在使用Visual Studio编写程序时,在沿着的某个地方出现了断点。自然地,我的第一个想法是在程序的早期设置一个断点,然后慢慢地逐行执行代码,直到我到达错误。但是很多时候,当我在调试器中慢慢地单步调试代码时,我发现一切都正常工作。然而,当我只是试图在没有断点的情况下运行程序时,就会出现问题。为什么会发生这种情况?逐行单步执行代码实际上与在dubug模式下运行程序不同吗?
fykwrbwg1#
原因之一可能是多个执行线程之间存在计时问题,当程序“全速”运行时和在调试器中暂停线程时,这些问题的发生方式不同。
vojdkbi02#
这可能是由于一些线程不安全的操作,这些操作在单步执行代码时似乎正确发生,但在运行时却不正确。排除了更复杂的优化,因为您确信正在运行调试版本。
snvhrwxg3#
在调试器内部运行实质上改变了运行时选项,例如堆操作,以便可以检测错误并向用户显示。请参见here。当进程在任何调试器下运行时,将自动为进程中的所有堆启用某些堆调试选项。这不一定是你的问题,但可能是一个候选人。
dtcbnfnu4#
在我的例子中,我使用一个本地.env文件将环境变量摄取到python脚本中,以便在vscode上进行本地测试。当我运行代码时,代码在调试模式下执行而没有错误。其背后的原因是,默认情况下vscode在调试模式下从.env文件中获取环境变量,而不是在运行脚本时,因此您必须通过直接导出~/.bashrc或~/.zshrc文件中的变量或通过使用load_dotenv使用以下片段来导出环境变量以正常运行:
.env
~/.bashrc
~/.zshrc
load_dotenv
from dotenv import load_dotenv load_dotenv()
这将在项目目录中查找.env文件,并在运行时设置环境变量。
4条答案
按热度按时间fykwrbwg1#
原因之一可能是多个执行线程之间存在计时问题,当程序“全速”运行时和在调试器中暂停线程时,这些问题的发生方式不同。
vojdkbi02#
这可能是由于一些线程不安全的操作,这些操作在单步执行代码时似乎正确发生,但在运行时却不正确。排除了更复杂的优化,因为您确信正在运行调试版本。
snvhrwxg3#
在调试器内部运行实质上改变了运行时选项,例如堆操作,以便可以检测错误并向用户显示。
请参见here。
当进程在任何调试器下运行时,将自动为进程中的所有堆启用某些堆调试选项。
这不一定是你的问题,但可能是一个候选人。
dtcbnfnu4#
在我的例子中,我使用一个本地
.env
文件将环境变量摄取到python脚本中,以便在vscode上进行本地测试。当我运行代码时,代码在调试模式下执行而没有错误。其背后的原因是,默认情况下vscode在调试模式下从
.env
文件中获取环境变量,而不是在运行脚本时,因此您必须通过直接导出~/.bashrc
或~/.zshrc
文件中的变量或通过使用load_dotenv
使用以下片段来导出环境变量以正常运行:这将在项目目录中查找
.env
文件,并在运行时设置环境变量。