
python的Vscode调试
调试并不是一个困难的过程。对我本人而言,从最早学习C语言时使用的Visual Studio时便已经开始使用,只要会打断点、单步执行即可。后来转到Java,使用Idea时也没什么问题。究其根本,是这两个的集成开发环境过于强大,许多东西都帮我免去配置的步骤了。但是后来我开始学习深度学习,使用vscode来写python,情况发生了一些变化。我突然不会调试了。开始使用最传统的添加print语句来进行测试
python的Vscode调试
写在开头的废话
调试并不是一个困难的过程。对我本人而言,从最早学习C语言时使用的Visual Studio时便已经开始使用,只要会打断点、单步执行即可。后来转到Java,使用Idea时也没什么问题。
究其根本,是这两个的集成开发环境过于强大,许多东西都帮我免去配置的步骤了。
但是后来我开始学习深度学习,使用vscode来写python,情况发生了一些变化。我突然不会调试了。开始使用最传统的添加print语句来进行测试。再后来,同门师兄告诉我有pdb这个东西,可以拿来在命令行进行调试。但pdb也有其缺点,比如在代码中添加的pdb.set_trace()需要一个一个手动删除。
所以今天要详细记录一下如何在vscode中调试python。并讲一下也许是Timed out waiting for debuggee to spawn的解决方案。
首先从最简单的做法看起
在安装完插件后,vscode右上角会有运行的标志,如下图中心的图标。
点击下拉按钮可以看到更多的内容:
最简单的方法就是使用第三行“Python 调试程序: 调试Python文件”来对代码进行调试,这是最直接的方法,调试完之后会在断点停下,可以进行其他操作。甚至可以在下方的调试控制台执行实时的代码。
但假如我们对调试有更高的要求,比如说添加参数,那么这种简单的方法就不适用了。需要配置launch.json文件,这个文件可以很好的满足我们的需求。下面我们进入高级调试篇。
高级调试
基础
最初的launch.json,即自动生成的,长这样,它在工程目录的.vscode/目录下:
要添加参数只需在args中配置,比如说我要传一个str进去
那么这段代码就会直接输出“–str”
所以如果原始命令行形如:python [your_file.py] —arrg1 —arg2
那么只需修改上图中的args即可。
添加环境变量
如果更进一步,想要将环境变量,例如CUDA_VISIBLE_DEVICES=0传入,那么就需要新增env变量:
不必担心为什么命令行中没出现,因为这个东西似乎是自动配置到终端里了,可以用下面的代码进行验证:
python -m 或者说python -m torch.distributed.launch该怎么办
最后,假如遇到了类似Timed out waiting for debuggee to spawn的问题。那么很有可能是由于在调用python -m torch.distributed.launch导致的,上述配置方法不适用于运行python -m。如果想要调用的话,需要删除launch.json中的"program": “${file}”,随后添加"module":"torch.distributed.launch"并将要执行的文件放到args中。这样便可以解决问题,下面是示例代码:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python 调试程序: 包含参数的当前文件",
"type": "debugpy",
"request": "launch",
"module":"torch.distributed.launch",
// "program": "${file}",
// "pythonArgs": [
// ],
"args": [
// "-m", "torch.distributed.launch",
"--nproc_per_node", "1",
"--master_port", "1111",
"train_dist_mod.py",
"--num_decoder_layers", "6",
"--use_color",
"--weight_decay", "0.0005",
"--data_root", "./data/",
"--val_freq", "3",
"--batch_size", "4",
"--save_freq", "3",
"--print_freq", "500",
"--lr_backbone", "2e-3",
"--lr", "2e-4",
"--dataset", "scanrefer",
"--test_dataset", "scanrefer",
"--detect_intermediate",
"--joint_det",
"--use_soft_token_loss",
"--use_contrastive_align",
"--log_dir", "./output/logs/eda",
"--lr_decay_epochs", "50", "75",
"--pp_checkpoint", "./data/gf_detector_l6o256.pth",
"--self_attend",
"--augment_det"
],
"env": {
"TORCH_DISTRIBUTED_DEBUG": "INFO",
"CUDA_VISIBLE_DEVICES": "0"
},
"console": "integratedTerminal",
"justMyCode": false
}
]
}
后记
学python很久了,现在才开始研究怎么调试,属实是太懒了,不过没有成系统的指导也是问题之一吧。
更多推荐
所有评论(0)