在这个Wing小贴士中,我们将继续研究如何使用Wing Pro来远程开发运行在AWS实例上的Python代码。这一次,我们将设置从IDE外部启动的代码的远程调试。这在调试网络应用程序和其他服务时非常有用。
前提条件
在开始之前,你需要一个可以SSH进入的AWS实例,并且你要为该AWS实例设置一个Wing项目。如果你还没有开始工作,请看上几周的Wing提示。使用Wing Pro在AWS上进行远程Python开发。
上述链接中给出的小的调试例子从IDE中启动了正在调试的远程代码。代码实际上是在AWS实例上运行的,但Wing在其远程代理的帮助下启动了它。现在我们反而要设置调试在IDE控制之外启动的远程代码。
具体做法是:(1)使用Wing Pro的远程开发支持,建立一个反向SSH隧道到远程AWS实例,这样调试器就可以连接回IDE,然后(2)在代码中插入一个导入,启动调试并与IDE连接。
设置远程监听
在你为远程AWS实例设置的项目中,点击Wing窗口左下方的bug图标,检查接受 调试 连接。

现在,如果你把鼠标悬停在bug图标上,你会看到Wing报告说它正在监听远程主机上50050端口的调试连接,同时也在监听本地主机。

开始调试
为了保持简单,我们将用一个简单的helloworld.py例子进行测试,而不是设置一个网络开发框架或其他服务,我们在Wing之外的命令行中手动启动这个例子。
你可以在AWS实例上创建这个文件,方法是右键点击你之前添加到Wing的项目工具中的目录,然后选择创建 新 文件。这将在一个对话框中收集新的文件名,或者在一些键盘配置中,在Wing窗口底部的状态区域中收集新的文件名,然后在编辑器中打开该文件。
然后粘贴以下代码并保存文件。
import wingdbstub
x = 1
print("Hello", x)
x +=1
print("Goodbye",x)
注意,第一行import wingdbstub启动调试,并通过你在上一节设置的反向SSH隧道连接到IDE。
为了使之工作,你需要将远程主机上自动预设的文件~/.wingpro7/remote-#.#.#/wingdbstub.py(其中#.#.#.#是你运行的Wing版本)复制到helloworld.py的同一目录中。这可以通过在Wing中打开文件并使用 另存为来完成。或者直接连接到你的AWS实例,cd到你的目标目录,然后把它复制到地方。
cp ~/.wingpro7/remote-#.#.#.#/wingdbstub.py .
如果你使用Lightsail,连接到你的实例的方便方法是在亚马逊Lightsail管理界面的 "连接"标签下使用 SSH连接。
最后,在测试代码的第3行设置一个断点,这样它就不会只是运行到完成,而是会在Wing的调试器中停止。这可以通过点击编辑器中最左边的空白来完成。

现在你只要在Wing之外启动测试代码就可以开始调试了。
python3 helloworld.py
第一次这样做时,Wing可能会拒绝连接并询问你是否要接受这个主机的安全令牌。 如果你早些时候从不同的Wing安装了远程代理,就会发生这种情况。

如果出现这个对话框,点击接受,然后第二次启动测试代码。
python3 helloworld.py
这一次Wing将接受连接,并应在你的断点上停止。

从这里,你可以在调试 控制台或堆栈 数据中检查你的调试过程,设置其他断点或条件断点,步入代码,等等。关于Wing调试器功能的更多信息,请参阅调试器快速入门或Wing的帮助菜单中的教程。
注意事项
要实际设置Wing以在您的AWS实例上与网络开发框架一起工作,请参见我们的Flask、Django或其他网络开发框架的指导手册。这些说明了在每种情况下可能需要的额外配置。
Wing的调试器还提供了一个简单的调试器API,可能会很有用,例如开发一种按需打开和关闭调试器的方法,或者控制哪些线程被调试。