之前用vscode写python debug的时候只知道两种:
-
写一个launch文件,里边写配置文件,例如:
{ "name": "test1", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "args": [ "--gradient_checkpointing", "True", "--output_dir", "/ssd/yangjz/PythonProject_2/MedM-VL/work_dirs/MedM-VL-2D-3B-en-finetune-gitee_test_3", "--dataloader_num_workers", "8", "--dataloader_pin_memory", "True", "--dataloader_persistent_workers", "True", "--num_train_epochs", "3", ], "env": { "TRANSFORMERS_OFFLINE": "1", "HF_DATASETS_OFFLINE": "1", "CUDA_VISIBLE_DEVICES": "6", } }这样做很不方便,一个是需要频繁改动这个配置文件,一个是需要另外写一个测试文件(也可以不写),最重要的还是要一个一个写一个一个改,如果已经有bash脚本并且参数比较多的情况下,这个工作就较繁琐且重复。之前一致没调研过相关的,就一直用这个,就导致每次很讨厌debug,因为要改很多东西。
-
使用breakpoint或者pdb,breakpoint实际上也是调用的pdb,这个是后来跟实验室以为同学了解的,这种在已有bash文件,且不想写debug 配置文件的时候还可以,但是还是有一点不方便的地方就是,需要提前在需要打断点的地方提前放一个breakpoint标记,如果想在某个包内部查看就得需要修改包的源文件,修改源文件这一点有点难以接受。
这两天也了解了ipdb和bupd,pubd有一个界面,但是有点卡,用不习惯。import pdb def add(a, b): pdb.set_trace() # 断点,程序运行到这里进入调试交互界面 return a + b add(1, 2) # 或者 def add(a,b): breakpoint() return a+b add(1,2)
这两种都有不方便的点,后来一直搜如何在vscode 优雅的debug,发现了下边这个文章:无痛使用 vscode 进行使用shell启动的 Python 脚本 debug方式
这个比上两种好很多,主要流程是使用debugpy在服务器或者本机开一个端口,然后使用vscode连接这个端口,然后就可以像第一种方式那样使用vscode debug了。主要流程如下:
-
同样在launch种写一个文件:
{ "version": "0.2.0", "configurations": [ { "name": "Python: Attach", "type": "debugpy", "request": "attach", "connect": { "host": "localhost", "port": 9001 } } ] }其中9001是要监听的端口号,选择一个未使用的即可。
然后在原来的sh文件中修改:
python -m debugpy --listen 9001 --wait-for-client test.py在终端运行这个命令,然后在vscode中点击debug即可,就可以像原来那样手动打断点了。

这个虽然也需要写配置文件,但是只需要写一次,主要修改在sh文件中,只需要在原本的sh文件中添加--debugpy xxx 即可
还没有评论,欢迎留下第一条。