You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调试运行中的Python程序?以A1111 Stable Diffusion WebUI为例

程序挂起时获取Python堆栈跟踪的方法

是的,完全可以在Python程序挂起时手动中断并获取堆栈跟踪,以下是几种适配Anaconda环境的可行方案:

一、Ctrl+C触发内置堆栈打印

  • 在Anaconda Prompt运行程序时,当程序挂起,直接按下Ctrl+C,Python会抛出KeyboardInterrupt异常,默认会打印当前堆栈跟踪。
  • 如果程序捕获了KeyboardInterrupt并屏蔽了输出,可修改启动脚本,在异常处理中添加traceback模块调用:
    import traceback
    try:
        # 原程序启动逻辑
        launch()
    except KeyboardInterrupt:
        traceback.print_exc()
        raise  # 重新抛出中断,保证程序正常退出
    

二、使用pdb调试器

  • 启动程序时附加pdb调试器,修改启动命令为:
    python -m pdb launch.py
    
  • 程序挂起时,切换到Anaconda Prompt窗口按下Ctrl+C进入pdb模式,输入where命令即可查看当前堆栈跟踪。
  • 也可以在疑似挂起的代码段前插入断点:
    import pdb; pdb.set_trace()
    
    运行到此处会暂停,输入continue让程序继续,待挂起时再按Ctrl+C进入调试查看堆栈。

三、启用faulthandler模块

  • 这是Python内置模块,可在程序挂起时强制打印多线程堆栈,适合Ctrl+C无效的场景:
  • 在启动脚本最开头添加:
    import faulthandler
    faulthandler.enable()
    
  • 程序挂起时,按下Ctrl+\(Windows系统可尝试Ctrl+Break),即可输出所有线程的堆栈信息。

四、使用py-spy工具(无侵入式)

  • 先在激活的Anaconda环境中安装:
    pip install py-spy
    
  • 程序挂起时,打开新的Anaconda Prompt窗口并激活同一环境,用tasklist | findstr python(Windows)获取Python进程的PID,然后运行:
    py-spy dump --pid <你的进程PID>
    
  • 该工具无需中断程序,即可生成所有线程的堆栈跟踪,适合需要保留程序状态的场景。

注意事项

  • 由于你使用了不兼容的库版本,堆栈跟踪可能会指向第三方库代码,需重点关注A1111 WebUI自身代码及硬件交互相关模块(如torch、CUDA类库)的调用栈。
  • 建议多次复现挂起场景,收集多份堆栈信息,对比定位共性问题。

内容的提问来源于stack exchange,提问作者user81993

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:03:19