使用WingIDE进行远程调试

1 投票
1 回答
913 浏览
提问于 2025-04-16 06:21

我在用WingIDE调试一个网页应用时,在一些Python代码中设置了一个断点,这段代码在提交网页表单时会运行。在断点之前,我插入了'import wingdbstub'来启动远程调试。不过,执行并没有在断点处停止。我知道代码在运行,因为如果我在断点之前插入'raise exception(sys.modules)',执行就会停止,并且浏览器中会出现一个错误追踪信息,显示wingdbstub已经加载。

当我把鼠标悬停在状态栏的虫子图标上时,会弹出一个对话框,显示“没有调试进程/在TCP/IP 50005上监听连接。允许的主机是127.0.0.1”。我知道我已经“失去”调试模式,因为a) 虫子图标从绿色变成了白色,b) 调试工具栏的按钮(比如逐步进入、跳过、跳出等)消失了。

我尝试删除编译后的.pyc文件,这样模块下次运行时会重新编译,但问题依然存在。

我该如何检查Wing是否在正确的端口上监听呢?奇怪的是,远程调试有时能工作,但大多数时候却不行。

任何帮助都非常感谢。顺便说一下,我使用的是Python 3.1,CherryPy 3.20和WingIDE Personal 3.2.11。

艾伦

1 个回答

2

在Windows系统下,我遇到过你提到的情况,也就是远程调试有时候能用,但经常会“卡住”。我发现有几个方法可以帮助解决这个问题:

  1. 确保你的防火墙没有阻止WingIDE和正在调试的程序之间的通信。比如我这边,需要在Windows防火墙里同时放行wing.exe和我想调试的程序。
  2. 检查一下是否有“僵尸”Python进程在运行,这些是之前调试失败后留下的进程。它们可能会占用与IDE的连接,让新启动的实例无法连接上去。在Windows下,你可以用tasklist命令查看正在运行的Python实例,使用netstat -anp tcp可以看到任何处于TIME_WAIT状态的连接。
  3. 在你的import wingdbstub语句后面加一个time.sleep(10)的调用。然后从控制台启动程序,确保它能在IDE中连接(调试图标会变成绿色),接着点击IDE中的“暂停”按钮,然后选择“跳出”。我也不知道为什么这样做有效,但我发现这在几次调试连接出问题后帮我解决了问题。

以上建议可能也适用于Linux,但到目前为止我只在Windows上遇到过这个问题……

撰写回答