Python在Debian中的调试技巧
pdb是Python标准库中的交互式调试工具,无需额外安装,适合快速定位代码问题。
import pdb; pdb.set_trace(),程序运行到该行时会暂停执行。n(next):执行下一行代码(不进入函数内部);s(step):进入函数调用(跟踪函数内部逻辑);c(continue):继续执行,直到遇到下一个断点或程序结束;l(list):显示当前执行语句周围的代码(默认显示5行上下文);p expression(print):打印指定表达式的值(如p x输出变量x的值);q(quit):退出调试器并终止程序。若pdb的功能不足以满足需求,可以使用增强版调试工具,提升交互体验。
pip install ipdb;pdb.set_trace()替换为ipdb.set_trace(),运行脚本后即可进入增强的调试模式。pip install pdbpp;import pdb替换为import pdbpp as pdb,其余用法与pdb一致。对于复杂项目,图形化调试工具能显著提升效率,提供可视化的断点管理、变量监控和流程跟踪。
日志记录是生产环境和长期项目中推荐的调试方式,能系统性地跟踪程序执行流程和状态。
logging模块记录不同级别的日志(DEBUG、INFO、WARNING、ERROR等),通过basicConfig设置日志级别和格式。
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def add(a, b):
logging.debug(f"Adding {a} and {b}")
return a + b
result = add(3, 5)
2025-10-19 12:00:00,000 - DEBUG - Adding 3 and 5,清晰展示函数调用和参数信息。pip install icecream;from icecream import ic; ic(add(3, 5)),输出:ic| add(3, 5): 8。pip install loguru;from loguru import logger; @logger.catch def divide(a, b): return a / b,当发生异常时会自动打印错误堆栈和变量值。pip install snoop;from snoop import snoop; @snoop def factorial(n): return n * factorial(n-1) if n else 1; factorial(5),输出函数调用的每一步及变量值。对于异步Python代码(如使用asyncio编写的代码),需要专用工具跟踪事件循环和任务状态。
async def函数内使用await时,pdb会正常暂停。pip install aiomonitor;from aiomonitor import start_monitor; start_monitor(),运行脚本后可通过命令行查看异步任务的执行情况。通过编写测试用例验证代码逻辑的正确性,提前发现问题。
AssertionError。
def divide(a, b): assert b != 0, "除数不能为零"; return a / b,当b为0时会抛出异常并提示错误信息。import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(add(3, 5), 8)
if __name__ == "__main__":
unittest.main()
当Python程序与系统交互(如文件操作、网络请求)出现问题时,可使用strace跟踪系统调用和信号,定位底层问题。
strace python your_script.py,会输出程序执行过程中的所有系统调用(如open、read、write),帮助分析是否因系统权限、文件不存在等问题导致程序异常。