Ubuntu上Python调试的常用方法
pdb是Python标准库中的调试工具,无需额外安装,适合快速定位代码问题。
import pdb; pdb.set_trace()
,程序执行到该行会暂停并进入交互模式。l
(list):显示当前代码行及上下文;n
(next):执行下一行(不进入函数);s
(step):进入函数调用;c
(continue):继续执行至下一个断点;p <变量>
(print):打印变量值;q
(quit):退出调试器。snap install pycharm-community --classic
安装社区版;打开项目后,点击右上角“Add Configuration”,选择“Python”,设置脚本路径和工作目录。.vscode/launch.json
文件,配置如下:{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
ipdb在pdb基础上增加了语法高亮、自动补全等功能,提升调试体验。
pip install ipdb
安装;在代码中用import ipdb; ipdb.set_trace()
替换pdb断点,启动后会进入增强的交互模式。PySnooper可自动记录函数执行过程中的变量变化,无需手动插入print语句。
pip install pysnooper
安装;在函数前添加装饰器@pysnooper.snoop()
,运行程序后会输出详细的执行日志(包括变量值、执行行号)。logging模块适合长期记录程序运行状态,便于后续分析。
logging.basicConfig
设置日志级别(如DEBUG
)和格式,代码中用logging.debug()
输出调试信息。import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def divide(a, b):
logging.debug(f'Dividing {a} by {b}')
return a / b
result = divide(10, 2)
运行后会输出类似2025-09-25 10:00:00 - DEBUG - Dividing 10 by 2
的日志信息。assert语句用于检查代码中的关键条件,若条件不满足则抛出AssertionError
,适合快速定位逻辑错误。
def calculate_discount(price, discount):
assert discount >= 0 and discount <= 1, "Discount must be between 0 and 1"
return price * (1 - discount)
result = calculate_discount(100, 1.5) # 触发AssertionError
若Python程序使用了C/C++扩展(如通过Cython编写的模块),可使用gdb调试底层代码。
sudo apt-get install gdb python-dbg
安装gdb和python调试符号;启动gdb并附加到Python进程(sudo gdb -p <pid>
),使用py-bt
命令查看Python调用栈,结合C调试命令(如bt
查看C栈)定位问题。