【IT168 技术】创建一个程序的过程中调试环节是必不可少的步骤,而且是相当重要的。在Silverlight的开发过程中,我们主要用Silverlight Tools for Visual Studio 2008 来对Silverlight应用程序进行调试。Silverlight Tools 支持大多数托管调试功能。但是,它不支持"编辑并继续"、实时调试和混合模式调试。安装 Silverlight Tools 后,可以像调试任何其他项目类型那样来调试 Silverlight 项目。按 F5 后,Visual Studio 将在默认的浏览器中启动您的应用程序,并附加调试器。然后,您可以执行常见任务,例如设置断点和检查调用堆栈。
1 将调试器附加到 Silverlight 进程
安装 Silverlight Tools 后,还可以将调试器附加到任意本地进程(前提是该进程是在受支持的浏览器中运行基于 Silverlight 的应用程序)。"附加到进程"对话框(在"调试"菜单上)列出了在"类型"列中标有"Silverlight"的那些进程。若要调试 Silverlight 代码,请使用"附加到"的默认值"Silverlight"来附加到浏览器进程。请注意,可以使用"附加到"的值"脚本"来在宿主网页中调试 JavaScript 代码。但是,不能同时调试 Silverlight 代码和 JavaScript 代码。
2 将调试器附加到远程 Mac 进程
您还可以将调试器附加到一个远程 Mac 浏览器进程(前提是该进程运行基于 Silverlight 的应用程序)。此操作要求在两台计算机上都要执行一些额外的配置步骤,并且仅在运行 Windows 的计算机和 Mac 计算机之间支持此操作。另外,当调试远程进程时,"反汇编"和"寄存器"窗口不可用。
3 Silverlight 调试 API
用于实现 Silverlight 托管代码调试的本机 API 是 ICorDebug Interface(ICorDebug 接口)。虽然 Silverlight 会添加一些新的 API,但该 API 还可用于实现使用完整 .NET Framework 的托管应用程序的调试器。这意味着,您可以将现有托管代码调试器扩展为支持 Silverlight,而无需使用大量新代码。
4 在Silverlight 项目中调试 JavaScript
在 Visual Studio 中,可以在托管 Silverlight 代码设置断点,也可以在宿主网页中的 JavaScript 代码中设置断点。但是,如本主题前面所述,不能同时调试 Silverlight 代码和 JavaScript 代码。若要使用 Internet Explorer 调试 JavaScript,首先必须将浏览器配置为启用脚本调试。在 Internet Explorer 的"工具"菜单上,选择"Internet 选项"。然后,在"高级"选项卡上,执行以下操作:
• 清除"禁用脚本调试(Internet Explorer)"复选框
• 清除"禁用脚本调试(其他)"复选框。
• 选中"显示每个脚本错误的通知"复选框。
• 清除"显示友好 HTTP 错误消息"复选框。
当您使用 F5 调试基于 Silverlight 的应用程序时,Visual Studio 默认情况下将附加 Silverlight 调试器。JavaScript 断点将显示一个工具提示,其消息为"当前不会命中断点。还没有为该文档加载任何符号。"可以用下列两种方法之一调试 JavaScript 代码:
• 使用 Ctrl+F5 启动您的应用程序,而不启动调试器。然后可以按照本主题前面所述,使用"脚本"代码类型将调试器附加到浏览器进程。附加调试器后,可以刷新浏览器以重新加载 Silverlight 插件。该插件是调试应用程序启动代码所必需的。
• 如果解决方案中包含 Web 项目,请禁用 Silverlight 调试器。在 Visual Studio 中,选择该 Web 项目,然后在"项目"菜单上,选择项目名称"属性"。接下来,在"Web"选项卡中的"调试器"部分,清除"Silverlight"复选框。然后,可以使用 F5 在不附加脚本调试器的情况下启动您的应用程序。
如果附加了脚本调试器,将禁用托管 Silverlight 代码中的断点。
在安装完Silverlight_Tool后我们就拥有了Silverlight调试器。但默认网站的调试器是Asp.Net调试器,如果不更换那么Silverlight中的断点可能永远不会命中。并且在VS中显示为不会命中断点。如下图
在网站的属性中选择上Silverlight调试器可以解决这个问题
了解过基础的配置之后,我们来看一个例子:
在 Mac上设置远程调试。Mac 上的 Silverlight 远程调试由以下部分组成:
• Visual Studio 2008 的一个加载项,它以传输选项的形式提供 Silverlight 远程调试。该加载项作为 Silverlight Tools for Visual Studio 2008 的一部分安装。
• 在 Mac 上运行的一个代理服务,可帮助远程调试器识别运行 Silverlight 应用程序的本地进程。它作为 Macintosh 的 Silverlight Developer 运行时的一部分安装。
远程调试是通过调试器和目标计算机之间的 SSL 加密 TCP 通道进行的。必须在 Mac 计算机和 Windows 计算机上都执行初始配置,才能设置 TCP 端口以及私钥/公钥对。下面的演练说明如何将计算机配置用于调试以及如何在 Visual Studio 2008 中启动调试会话。
需要以下组件来完成本演练:
• 运行 Windows 的计算机,其上安装有 Visual Studio 2008 SP1 和 Silverlight Tools for Visual Studio 2008。
• 安装有 Silverlight Developer 运行时的 Mac 计算机。
• 这两台计算机都连接到网络。
• 可通过某种方法在 Windows 和 Mac 计算机之间传输文件。
设置远程调试
首先,必须在 Mac 计算机上配置远程调试代理。
配置 Mac 计算机
1 从 /Applications 目录运行“Silverlight 调试配置”应用程序。
2 单击“生成新配置”按钮。
这样可产生以下效果:
• “网络端口(TCP IPv4)”字段中填入了一个随机生成的介于 49152 和 65535 之间的端口号。
• 创建一个每用户配置目录 ~/Library/Application Support/SilverlightDebuggingConfig1.0/,其中包含以下文件:Certificate.dat、PrivateKey.dat 和 Settings.dat。
• 创建每用户启动代理 ~/Library/LaunchAgents/com.microsoft.silverlight.debugproxy.plist。
3 在“加密密码”文本框中指定一个 8 到 25 个字符的密码,然后将它复制到“验证密码”文本框中。
4 在“复制器路径”文本框中,为 PC 配置指定一个路径和 .exe 文件名,或者接受默认值。
5 单击“生成 PC 配置”按钮。
将弹出一个对话框,要求确认是否在第 4 步中指定的位置创建 PC 配置 .exe 文件。如果运行 Windows 的计算机将用来调试 Mac 计算机上的 Silverlight,则可以将该文件与此计算机配合使用。若需要,还可以重新生成该文件,方法是重新运行“Silverlight 调试配置”应用程序,并从第 4 步开始执行上述过程。
Mac 计算机此时即配置完毕,可用于远程调试。接下来,将使用生成的 .exe 文件配置运行 Windows 的计算机。
配置运行 Windows 的计算机
1 关闭所有打开的 Visual Studio 实例。
2 将在前面的过程中创建的 .exe 文件复制到运行 Windows 的计算机。
3 运行此 .exe 文件。
4 输入在前面的过程中指定的密码。
5 在指示 Windows 配置已成功完成的对话框中,单击“确定”。
运行 Windows 的计算机此时即配置完毕,可用于远程调试。接下来,将在这两台计算机之间建立连接,以便可以开始进行调试。
将 Visual Studio 调试器连接到您的 Mac 上运行的基于 Silverlight 的应用程序
1 在您的 Mac 计算机上启动要调试的基于 Silverlight 的应用程序。
2 在运行 Windows 的计算机上,使用 Visual Studio 打开在 Mac 计算机上运行的应用程序所对应的 Silverlight 项目。
3 在“调试”菜单上选择“附加到进程”。
4 在“传输”下拉列表中选择“Silverlight 远程跨平台调试”。
5 在“限定符”组合框中,指定您的 Mac 计算机的完全限定域名或 IP 地址。
“可用进程”窗口显示您的 Mac 上当前正在运行的进程的列表。
6 选择基于 Silverlight 的应用程序进程。可以通过“类型”列来识别 Silverlight 进程。
7 单击“附加”。
Visual Studio 调试器此时即附加到 Mac 中的目标进程。这时可以使用 Visual Studio 执行一般调试器任务,例如设置断点、逐句通过代码和检查调用堆栈。
有时,您可能希望撤消刚执行过的配置。例如,可能需要针对 Silverlight 的下一版本对配置进行升级。下面的过程描述如何撤消前面的过程。
移除 Mac 调试配置
1 在运行 Windows 的计算机上打开一个命令提示窗口,然后运行下面的命令:
如果是 Windows Vista:
如果是 Windows XP:
2 在 Mac 计算机上打开一个终端窗口,然后运行以下命令:
cd ~/Library/LaunchAgents
launchctl unload ~/Library/LaunchAgents/com.microsoft.silverlight.debugproxy.plist
rm ~/Library/LaunchAgents/com.microsoft.silverlight.debugproxy.plist