Linux Python pdb调试(附带例子解释)

本文介绍如何使用pdb在Linux环境下调试Python程序,包括非侵入式和侵入式两种调试方式,提供了一系列pdb的基本操作指令,并通过具体示例展示了如何在实际项目中应用这些调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


刚读研的时候看到老师用pdb debug觉得很酷,不知道怎么用,下来后自己试了试,我感觉很好用!(1、可能是因为debug的文件夹都比较熟悉了所以觉得pdb好用,建议还是可以用vscode调试;2、亲身体验在Linux使用pdb调试打印model时显示不完整,不利于查看,在vscode的终端pdb调试能完整的看到model)

1、应用场景

用于Linux系统下Python文件的debug。

  • 直接调试Python文件(此时我们的文件夹就全是Python文件,需要调试的Python文件不在一些执行脚本里面)。
  • shell脚本里带有Python文件时(我们实现一些功能的时候,会写一个shell脚本即.sh文件,里面可能包括一些变量、路径之类的,也包括我们要运行的Python文件。运行的时候我们运行.sh文件,如果脚本里有运行Python文件的命令,那自然而然里面的Python文件也被运行到了)。

2、两种方式调试

  • 非侵入式方法
    python -m pdb xxx.py 如果还有后续的参数,直接加在它后面。
    如果是要调试Pytorch的神经网络,如下命令:
    torchrun -m pdb xxx.py : 注意调试的时候使用一个GPU, 一个线程来调试最好。
  • 侵入式方法
    需要在运行的文件中增加一行
    import pdb;pdb.set_trace()

3、基本操作

  • 查看源代码:l 查看当前位置前后11行。ll,查看当前函数的所有代码
  • 运行下一行:n 就是往下运行一行
  • 添加断点:b /mnt/database/xxx.py:100 在/mnt/database/xxx.py路径下的xxx.py文件的第100行打断点
  • 清除断点:cl
  • 打印变量值:p A 打印变量名为A的值(若是想打印这个A的shape之类的属性值都可以,即p A.shape,就会把A的shape打印出来,打印其他属性操作是一样的)
  • 进入函数:s 如果我们运行到某一行,这一行调用了一个函数,我们就可以使用s,然后就可以跳到那个函数里面去
  • 执行下一行:r如果在函数中,直接运行到函数返回处
  • 直接跳转到指定行:j 100 跳到第100行
  • 跳到断点处:c 先使用b打断点,然后使用c就可以直接跳到断点处
  • 持续执行直到运行到指定行:unt 100假如我现在在第20行,使用该命令我可以一直往下执行到第100行
  • 在函数中时打印函数的参数和参数的值:a
  • 退出pdb调试:q
  • 如果要重新开始下一次调试:(即保留断点设置和debugger设置):restart

4、例子解释

  • 我使用的是wenet中写好的run.sh脚本(wenet是一个做语音识别的开源工具),对网络训练的时候进行debug
  • shell脚本内容(看下我代码里的注释)
#!/bin/bash
. ./path.sh || exit 1;

export CUDA_VIS
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值