文章目录
1 情况概要(和文件结构)
环境:Linux Ubuntu
最近在跑大模型,遇到一份代码的具体程序是通过subprocess.run()
来启动的,而vscode的debug功能无法追踪进去。也就是说,我有父进程launch.py来启动subprocess.run()
,调用子进程文件run.py
。我可以单步调试追踪到subprocess
这一步并进入run()
函数,但是无法继续进入子进程的工作,无法追踪到run.py
看我真正想看的代码。
这里父进程文件和子进程文件的概念我没有细究,大概意思是主动调用subprocess.run()
来创建子进程的是父进程文件,被subprocess.run()
跑起来的是子进程文件。
附上文件结构的简单示意。
-
test.sh:
python launch.py
并传一堆参数 -
launch.py:父进程,主要内容为
def python_launch(args):
"""
Vanilla python launcher for degbugging purposes
"""
# ....
# 构造cmd
cmd = f"python {
args.run_file}" # 省略一堆参数
# 启动subprocess
subprocess.run(cmd, shell=True)
- run.py:子进程,主要内容为
def main(cfg):
# 环境变量设置,数据读取,新建文件夹之类的之类的
# ...
# 初始化trainer并训练
trainer = build_trainer(cfg)
trainer.run()
2 具体设置和启动步骤
我们的目标是,我从某个地方把程序起起来并创建了子进程,然后把debugger连接到子进程上,于是它可以在子进程的断点地方停下、正常调试。
那么我们需要做到两件事情:1)把Debugger attach到子进程;2)子进程要能等待我们attach,而不是一股脑往下运行,那就来不及停在断点。
2.1 具体配置
我们分别对这两件事情做配置。
Step 1 针对attach debugger到子进程
采用vscode的python debugger插件,新建debugger config如下(编辑的是launch.json)
{
"name": "Python: Attach to Subprocess", //随便起名
"type": "python",
"request": "attach", //附加到子进程
"processId"