杰瑞科技汇

Python在Sublime中如何调试?

下面我将为你提供一个从入门到实践的完整指南,涵盖最主流的两种方法:

Python在Sublime中如何调试?-图1
(图片来源网络,侵删)
  1. 使用 SublimeREPL(最简单,适合初学者)
  2. 使用 Sublime Debugger(更强大,接近 IDE 体验)

准备工作:安装 Package Control

无论使用哪种方法,你首先都需要在 Sublime Text 中安装 Package Control,这是管理所有插件的基石。

  1. 打开 Sublime Text。

  2. 按 `Ctrl + `` (反引号) 打开命令行。

  3. 根据你的操作系统,执行以下对应的代码并回车:

    Python在Sublime中如何调试?-图2
    (图片来源网络,侵删)
    • Windows:
      import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ','%20')).read())
    • OS X:
      import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ','%20')).read())
    • Linux:
      import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ','%20')).read())
  4. 重启 Sublime Text,现在你可以在 Preferences -> Package Settings 中看到 Package Control 菜单了。


使用 SublimeREPL(交互式调试)

这种方法的核心是在 Sublime Text 中打开一个 Python 交互式终端(REPL),然后手动执行你的代码,并在代码中加入 pdb (Python Debugger) 断点进行调试,它非常适合快速测试和学习。

步骤 1: 安装 SublimeREPL

  1. Ctrl + Shift + P 打开命令面板。
  2. 输入 Package Control: Install Package 并回车。
  3. 在列表中搜索 SublimeREPL 并选择它进行安装。

步骤 2: 配置 SublimeREPL

  1. Ctrl + Shift + P,输入 SublimeREPL: Python - RUN current file,这会创建一个默认的快捷键。
  2. 为了方便使用,建议自定义一个快捷键,设置为 F5
    • 打开菜单 Preferences -> Key Bindings
    • 在右侧的用户配置文件中,添加以下 JSON 代码:
      [
          { "keys": ["f5"], "command": "run_existing_window_command", "args": {"id": "repl_python_run", "file": "config/Python/Main.sublime-menu"} }
      ]
    • 保存文件。

步骤 3: 使用 SublimeREPL 进行调试

假设你有以下 Python 文件 test.py

# test.py
def find_factorial(n):
    if n < 0:
        print("Error: Factorial is not defined for negative numbers.")
        return None
    if n == 0:
        return 1
    else:
        # 在这里设置一个断点
        import pdb; pdb.set_trace()
        return n * find_factorial(n - 1)
if __name__ == "__main__":
    num = 5
    print(f"Calculating factorial of {num}...")
    result = find_factorial(num)
    print(f"The factorial of {num} is {result}")

调试过程:

Python在Sublime中如何调试?-图3
(图片来源网络,侵删)
  1. 打开 test.py 文件。

  2. F5 (或你设置的快捷键),Sublime Text 会在一个新的窗格中打开一个 Python REPL 终端,并自动运行你的文件。

  3. 你会看到 REPL 输出:

    Calculating factorial of 5...
    > <string>(1)<module>()
    (Pdb)

    这表示程序在 import pdb; pdb.set_trace() 这一行停下了,进入了 pdb 调试模式。

  4. 使用 pdb 命令进行调试:

    • n (next): 执行到下一行。
      • 输入 n,程序会执行 return n * find_factorial(n - 1),然后因为要调用 find_factorial,所以会再次进入函数,再次停在 pdb.set_trace()
      • 你会看到 > <string>(1)<module>() 再次出现。
    • c (continue): 继续执行,直到下一个断点或程序结束。
      • 输入 c,程序会继续执行,直到下一个 pdb.set_trace()
    • l (list): 查看当前代码段的上下文。
    • p <variable> (print): 打印变量的值。
      • 输入 p n 会打印出当前 n 的值。
    • q (quit): 退出调试器,终止程序。

使用 Sublime Debugger(IDE 风格调试)

这种方法更接近专业 IDE 的体验,你可以在代码行号旁边直接点击设置断点,通过图形化界面控制执行流程、查看变量、调用堆栈等。

步骤 1: 安装 Sublime Debugger 及其依赖

  1. Ctrl + Shift + P,输入 Package Control: Install Package
  2. 搜索并安装 Sublime Debugger
  3. 重要依赖Sublime Debugger 依赖于 python-pydevd,你需要通过 pip 安装它。
    • 打开你的系统终端(不是 Sublime 的)。
    • 运行命令:pip install python-pydevd

步骤 2: 配置 Sublime Debugger

  1. Ctrl + Shift + P,输入 Sublime Debugger: Python - Debugger,这会创建一个默认的快捷键。
  2. 同样,建议自定义一个快捷键,例如设置为 F5
    • 打开 Preferences -> Key Bindings
    • 在用户配置文件中添加:
      [
          { "keys": ["f5"], "command": "python_debugger", "context": [{ "key": "selector", "operator": "equal", "operand": "source.python" }] }
      ]
    • 保存文件。

步骤 3: 使用 Sublime Debugger 进行调试

我们使用同样的 test.py 文件,但这次我们使用 Sublime Debugger 的断点功能。

# test.py
def find_factorial(n):
    if n < 0:
        print("Error: Factorial is not defined for negative numbers.")
        return None
    if n == 0:
        return 1
    else:
        # 移除了 pdb.set_trace()
        return n * find_factorial(n - 1)
if __name__ == "__main__":
    num = 5
    print(f"Calculating factorial of {num}...")
    result = find_factorial(num)
    print(f"The factorial of {num} is {result}")

调试过程:

  1. 打开 test.py 文件。
  2. 设置断点:在 return n * find_factorial(n - 1) 这一行行号的左侧空白处单击,会出现一个红色的圆点,这就是断点。
  3. 启动调试器:按 F5 (或你设置的快捷键)。
    • Sublime Text 底部会出现一个调试控制台。
    • 你的代码会高亮显示,停在断点所在的那一行(此时该行还未执行)。
  4. 使用调试控制台进行调试:
    • 你会看到一个包含多个按钮的控制台:
      • Continue (F5): 继续执行到下一个断点。
      • Step Over (F10): 执行当前行,如果当前行是函数调用,则进入函数内部。
      • Step Into (F11): 进入当前行的函数内部。
      • Step Out (Shift+F11): 执行完当前函数的剩余部分,并跳出函数。
      • Restart: 重新启动调试。
      • Stop: 停止调试。
    • 查看变量:在调试控制台的右侧,通常会有一个 "Variables" 或 "Scope" 面板,它会自动显示当前作用域内的所有变量及其值,你可以实时观察 nresult 的变化。
    • 查看调用堆栈:通常会有一个 "Call Stack" 面板,显示函数的调用层级,方便你了解程序的执行路径。

两种方法对比

特性 SublimeREPL + pdb Sublime Debugger
易用性 较低,需要记忆 pdb 命令 ,图形化界面,直观
断点设置 手动在代码中插入 pdb.set_trace() 直接在行号旁点击,非常方便
变量查看 使用 p <var> 命令打印 自动在侧边栏显示所有变量
调用堆栈 无直接查看方式 有专门的 Call Stack 面板
调试控制 通过命令行输入 通过工具栏按钮
适用场景 快速交互式调试、学习 pdb 复杂项目调试、接近 IDE 的体验

总结与建议

  • 如果你是初学者,或者只是想快速运行一段代码并检查某个点的状态,SublimeREPL 是一个不错的选择,它轻量且无需太多配置。
  • 如果你习惯了 PyCharm/VS Code 的调试方式,或者正在处理一个复杂的项目,强烈推荐 Sublime Debugger,它提供了更专业、更高效的调试体验,能极大地提升你的开发效率。

对于大多数 Python Sublime Debugger 是更优的选择,它让你即使在一个轻量级的编辑器中,也能享受到专业 IDE 的核心调试功能。

分享:
扫描分享到社交APP
上一篇
下一篇