vscode debug学习笔记,以后以debug的形式学习任何项目~

pprint() 是 Python 标准库 pprint 模块中的一个函数,主要用于格式化打印复杂数据结构,使其更易于阅读。它特别适合打印嵌套的字典、列表等数据结构。

PaperAgent项目

点击左侧的“运行和调试”,点击“创建一个launch.json文件”,选择python debugger,然后选python文件。
出现下列config文件:
在这里插入图片描述
将“当前文件”修改为你的项目名,项目名就会出现在运行和调试那里。
修改成 : “program”: ${workspaceFolder}/main.py"(表示对当前根目录下的main.py进行 debug)

然后我们先不要打断点:断点哪里显示 “✅Uncaught Exceptions”
在这里插入图片描述点击“运行和调试”,就会定位到当前程序的错误,并且显示变量以及变量的数据结构及内容。

掌握VSCode远程调试技巧:轻松Debug复杂Python项目

视频链接:https://www.bilibili.com/video/BV1794y1B7M5/?vd_source=baa5f3043be10f96febc0c68c5983df5
讲的是当我们接触一个项目,找到他的运行脚本 .sh文件的时候,这个脚本其实就是执行某个python文件来启动实验。现在我们想debug这个项目,看看数据流以及数据流的数据结构和内容,该怎么做?
我们要做的就是把.sh脚本转为.json文件。
在这里插入图片描述
也是点击 运行和测试,创建.json文件,选择Python File With Arguments,name就是你给这个debugger起的名字,program改成通过脚本启动的.py文件(文件路径)。以及参数args(如果有)
在这里插入图片描述然后我们开始打断点。对脚本.sh启动的.py文件,打开他,在main()那行打断点。然后点击 运行和测试
在这里插入图片描述

点击的这个按钮(step into)
在这里插入图片描述
在这里插入图片描述点上面这个按钮进到下一步。然后就可以将光标指向变量,他会显示变量的相关信息,方便我们读懂代码。
json文件里面加一段,就能调试其他程序或者调同一个程序。用调试名来区分。
在这里插入图片描述

VSCode Debug Python项目 | Debug技巧

https://www.bilibili.com/video/BV1i4421Z7aM/?vd_source=baa5f3043be10f96febc0c68c5983df5

A. 设置工作目录(current working directory):
用于指定调试时Python程序的工作目录。
与 program 的区别:program 指定要调试的 Python 文件路径,cwd 指定程序运行的工作目录
.json文件里的"cwd"。

核心作用:

  1. 相对路径解析基准:程序中所有相对路径(如 open(“data.txt”))都将以 cwd 指定的目录为起点查找文件Visual Studio Code。
  2. 影响系统调用行为:os.getcwd()、os.listdir() 等函数会返回 cwd 目录的结果
    模块导入与路径查找:影响 Python 解释器的模块搜索路径,确保正确导入项目内的自定义模块。
  3. 终端命令执行上下文:调试时在集成终端中执行的命令将以此目录为工作目录

在这里插入图片描述

B. 参数的设置args
有两种方式:
若为第一种,则需要选择,Python Debugger:Current File with Arguments

在这里插入图片描述

四种特殊断点,快速定位臭虫| vscode | 调试技巧 |debug

https://www.bilibili.com/video/BV1EpmbYqExH/?vd_source=baa5f3043be10f96febc0c68c5983df5

程序如下:

在这里插入图片描述

接下来要在return result打断点,右键该断点,点击“编辑断点”
在这里插入图片描述4种特殊断点。这四个特殊断点之间是 或or 的关系!

  1. 条件断点(“表达式”)
    填写条件:result>10
    那么当每次result>10时候,程序就会在这终止。我们就可以去查看变量,或者“逐过程”

  2. 命中次数断点
    表示这个断点在被经过多少次之后才被中断运行
    如果想设置 在运行后的2次及以上 就中断,写 >=2

  3. 日志信息断点
    不会终止程序,而是会在运行完之后,在“调试控制台”显示我们输入的信息(写法和fstring差不多,但是不需要 f"" 这两个字段),比如:
    在这里插入图片描述
    在这里插入图片描述

  4. 联动断点(“等待断点”)
    这个断点需要和其他断点关联(可以是其他文件的断点),只有当那个被关联的断点中断过,这个联动断点才会中断。
    设置 return result命中次数断点,命中次数为2
    再设置 for a,b in pairs: 联动断点,联动上面这个命中次数断点。
    可以看到在命中第二次时候断了,然后点击“继续”,发现第八行的联动断点因为所关联的断点断过了,第八行也才断。
    注意:只要被关联的断点触发过,联动断点就会一直起断点的作用。

在这里插入图片描述
在这里插入图片描述

searR1-debug

启动方法(不跑smoke,换一下。)

下次你要开启 debug 学项目,按这个固定流程走就最稳。

推荐流程(只用一个训练集群)

  1. 先清理旧 Ray,避免 8265/8266 混在一起。
cd /root/private_data/Search-R1
./.venv/bin/ray stop -f || true
/opt/conda/bin/ray stop -f || true
  1. 终端 A 启检索服务(你原来的代理方式保持不变)。
cd /root/private_data/Search-R1
export http_proxy="http://127.0.0.1:10808"
export https_proxy="http://127.0.0.1:10808"
export all_proxy="socks5://127.0.0.1:10808"
export no_proxy="127.0.0.1,localhost,::1,172.20.150.72"
bash run_retriever.sh
  1. 终端 B 启训练 + Ray 调试(不要先手动 ray start --head)。
cd /root/private_data/Search-R1
export http_proxy="http://127.0.0.1:10808"
export https_proxy="http://127.0.0.1:10808"
export all_proxy="socks5://127.0.0.1:10808"
export no_proxy="127.0.0.1,localhost,::1,172.20.150.72"
unset RAY_ADDRESS
bash run_grpo_smoke.sh
  1. 等日志出现这两行再去 VS Code 里连 Ray debugger。
grep -n "Started a local Ray instance|Ray debugger is listening|Waiting for debugger to attach" nq-search-r1-grpo-qwen2.5-0.5b-smoke.log | tail -n 5

看到 dashboard 是 127.0.0.1:8266,就在 Ray debugger: clusters 填 127.0.0.1:8266。

  1. 在 Ray debugger 里应能看到 paused task(main_task),然后继续单步看代码。

你可以记住一个原则:

  1. 不要猜端口,看日志里当前训练实际连的是哪个 dashboard,再填哪个。
  2. 你的脚本 run_grpo_smoke.sh 默认是本地 Ray,所以通常会是新开的那套集群。
  3. 训练里真正启动 Ray 的点在 main_ppo.py。

如果你愿意,我可以再给你一份“每天复现实验前 30 秒自检命令清单”(一条命令直接告诉你该填 8265 还是 8266)。

debug方法

左侧ray debugger出现:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个按钮是进入到下一个断点,第二个按钮是运行到下一行代码。第三个按钮是进入函数。

右键某个变量,可选:在调试控制台中评估 或者 添加到监视。都是debug的方法。加油继续坚持学!

更多推荐