如何在 Windows Azure 中使用远程桌面调试辅助角色?

Posted

技术标签:

【中文标题】如何在 Windows Azure 中使用远程桌面调试辅助角色?【英文标题】:How do I debug a Worker Role using Remote Desktop with Windows Azure? 【发布时间】:2011-09-28 10:41:46 【问题描述】:

我现在已经设置了我的 Windows Azure 环境,以便我可以使用远程桌面访问我的 Worker 角色。但是,我目前不确定如何进行。经过大量挖掘,我发现了一个离线的网站,但在 Google 的缓存中,提到了从 Visual Studio 调试器附加到在 Azure 云中运行的 Worker Role。但是我只有 Visual Developer(不是工作室)2010,而且我已经搜索了所有内容,据我所知,没有这样的选项可以连接到远程服务器。我能够毫无错误地将我的项目发布到 Azure 云,并且我的 Worker Role 的“健康”实例显示为活动且正在运行。

我确实通过 Azure 管理门户连接了 RDP。登录工作正常,远程桌面窗口出现了。我搜索了很多我能找到的东西,但找不到我的工人角色。我对RDP的印象一定是错误的,因为我本来希望在登录的时候看到Worker Role的主显示窗体,就像我在Cloud Emulator本地调试时一样。但相反,我看到的只是一个空白桌面,上面有一些基本的服务器检查和管理例程。我什至检查了事件查看器以获取与应用程序相关的消息,但没有看到任何消息。

所以现在我想知道我的 Worker Role 是否真的在运行,尽管来自管理门户的状态消息看似积极,如果可能的话,我仍然想附加到我的 Worker Role 以通过 Visual Developer 进行调试,但我无法弄清楚如何。

任何有这方面经验的人可以给我一些关于下一步做什么的可靠提示,请回复。

更新:我相信我的工作角色可能正在运行,因为我打开了一个命令窗口并执行了 Netstat 并看到它正在侦听正确的端口。但是,这可能只是我的 Worker Role shell 类,它启动了自定义 EXE,我将它作为衍生进程启动。我还没有确认我的自定义 EXE 是否正在运行。

UPDATE-2:刚刚从命令窗口运行 TaskList 并列出了自定义 EXE。

UPDATE-3:一切正常,因为我刚刚对服务进行了远程测试,所以这不是问题。仍然想知道如何从 Visual Developer 2010 附加到 Worker Role 以进行远程调试,以及是否可以像我在 Cloud Emulator 中进行本地调试时一样看到自定义 EXE 的显示形式。

-- 罗施勒

【问题讨论】:

您必须使用调试器进行连接吗?还是只看消息就足够了? @Anže Vodovnik - 我会采取我现在能得到的,但最终我需要调试我想。另外,请参阅我对原始帖子的更新说明。如果您还没有看到它,那是因为我还没有完成输入。 另外,是否可以像我在本地调试时看到的那样看到我的 Worker Role 主屏幕的远程屏幕演示(RDP 是否这样做)? 【参考方案1】:

这里有一组文章详细介绍了如何在 Azure 中设置远程调试:

http://blogs.u2u.be/peter/post/2011/06/21/Remote-debugging-an-Azure-Worker-role-using-Azure-Connect-Remote-desktop-and-the-remote-debugger.aspx

http://blogs.u2u.be/peter/post/2011/06/24/Remote-debugging-an-Azure-worker-role-using-Azure-Connect-remote-desktop-and-remote-debugger-part-2.aspx

http://blogs.u2u.be/peter/post/2011/06/26/Remote-debugging-a-Windows-Azure-Worker-Role-using-Azure-Connect-Remote-desktop-and-the-remote-debugger-part-3.aspx

关键是您不需要在 Azure 上实际安装 Visual Studio,您只需复制远程调试器位,然后使用 Azure Connect 将您的开发人员计算机添加到虚拟网络。

【讨论】:

@UriMay:blogs.u2u.be 应用程序很烂,但您可以从整体页面视图中获得有用的内容:blogs.u2u.be/peter/?page=2 和 blogs.u2u.be/peter/?page=1【参考方案2】:

您可以使用 Visual Studio 2012 设置远程调试http://code.msdn.microsoft.com/Remote-Debugging-Windows-dedaaec9

【讨论】:

这里稍微总结一下会很有用 Windows Azure SDK 2.2 版本增加了对远程调试多种 Windows Azure 资源的支持。 weblogs.asp.net/scottgu/archive/2013/10/22/…【参考方案3】:

当你说:

但我看到的只是一个空白桌面,上面有一些基本的服务器检查和管理例程。

这正是您使用 Azure VM 所获得的。这是一个基本的操作系统安装,加上它需要运行的最基本的 Azure 东西和你上传的代码。默认情况下,机器上没有花哨的监控或运行状况检查,您应该自己提供这些以使它们可用,而无需 RDP 进入机器进行检查。

RDP 非常适合跟踪某些问题,例如检查启动任务是否会运行,检查项目安装在哪些目录中,并且通常只是很麻烦。如果您需要额外的工具来追踪问题,您可以在连接到服务器时安装它们。例如,我已经 RDP 到服务器并安装了Microsoft Debugging Tools,以追踪内存问题。

【讨论】:

当我在本地调试由我的 C# Worker Role 代码生成的自定义 EXE 时,在 Cloud Emulator 中,它会出现一个显示表单,其中包含一个日志窗口和其他一些东西;主应用程序屏幕,如果你愿意的话。这与 EXE 独立运行时的行为完全相同。换句话说,它不是无窗口后台服务,甚至不是控制台应用程序。这是一个完整的 Windows GUI 应用程序。当我登录 RDP 控制台时,我看不到应用程序的 GUI,即使它运行良好。我试图找出为什么我看不到那个 GUI 元素,以及是否有办法。 @knightpfor - 感谢 Microsoft 调试工具链接。如果您知道有说明如何使用 Azure 和 Visual Developer 2010 进行安装的教程,请告诉我。 当您 RDP 进入您的 VM 时,您将作为您在 RDP 设置中指定的特定用户执行此操作。但是,您的工作人员角色并未作为该用户运行,而是作为系统帐户之一运行(我不记得是哪一个)。因此,与任何其他 RDP 会话一样,您无法看到其他用户的桌面。【参考方案4】:

我想你可以远程进入你的虚拟机,在那里安装 Visual Studio,然后调试进程......

我还认为可以启用远程调试(不确定其中涉及什么,但存在这样的东西,并且它通过 TCP 工作)并从 Visual Studio 的本地实例进行调试。

据我所知,这两种方法都不常见。

【讨论】:

我做过远程调试,但是太慢了,不实用。我认为 WinDebug 可能是要走的路,但学习曲线非常陡峭。 你好@smarx。我偶然发现的网页提到了将一些额外的 DLL 烘焙到 Worker Role 中。但我得到了我正在寻找的答案。这不实用。我仍然希望能够看到我的自定义 EXE 的 GUI,由于某种原因,当我使用 RDP 登录时它是不可见的。 当您进入 RDP 时,您与运行 exe 的位置不在同一个 GUI 上下文中。 (您甚至没有以同一用户身份登录。)我什至不确定您的 exe 一个 GUI 上下文供您查看。 @smarx - 对。忘记了一个简单的事实,即 RDP 不像注入的监控程序,而是单独登录的用户,谢谢。【参考方案5】:

根据其他答案,您最好将日志文件写入本地存储。如果您真的需要,您可以从 RDP 读取文件。请记住,在 Azure 上进行调试并不是很简单,这是正确的。

我的想法是,也许你可以运行 process using the user's credentials. I 无法验证,但你在 rdp 时可以更好地看到 ui。

【讨论】:

关于用户凭据的有趣想法。听起来我的下一个项目需要挖掘本地存储,然后是 SQL 存储。希望 Azure SQL 与 mysql 没有太大区别。

以上是关于如何在 Windows Azure 中使用远程桌面调试辅助角色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows Azure上搭建SSTP VPN

如何在Windows Azure上搭建SSTP VPN

将文件从远程桌面(RDP)复制到Azure blob存储中

Windows7中如何限制远程桌面的IP

如何将调试器附加到在 Windows Azure VM 上运行的应用程序?

如何修改windows server 2003远程桌面最大连接数