调试失败 U-SQL 作业的用户定义 C# 代码
重要
Azure Data Lake Analytics于 2024 年 2 月 29 日停用。 通过此公告了解更多信息。
对于数据分析,组织可以使用 Azure Synapse Analytics 或 Microsoft Fabric。
U-SQL 使用 C# 提供扩展性模型。 在 U-SQL 脚本中,可以轻松调用 C# 函数并执行类似 SQL 的声明性语言不支持的分析函数。 若要详细了解 U-SQL 扩展性,请参阅 U-SQL 可编程性指南。
实际上,任何代码都可能需要调试,但很难在具有有限日志文件的云上使用自定义代码调试分布式作业。 针对 Visual Studio 的 Azure Data Lake 工具提供一项称作“失败顶点调试”的功能,可帮助我们更轻松地调试自定义代码中发生的失败。 当 U-SQL 作业失败时,服务会保留失败状态,该工具可帮助将云故障环境下载到本地计算机进行调试。 本地下载捕获整个云环境,包括任何输入数据和用户代码。
下面的视频展示了针对 Visual Studio 的 Azure Data Lake 工具中的“失败顶点调试”功能。
重要
若要使用此功能,Visual Studio 要求安装以下两个更新:Microsoft Visual C++ 2015 Redistributable 更新 3 和用于 Windows 的通用 C 运行时。
将失败顶点下载到本地计算机
在针对 Visual Studio 的 Azure Data Lake 工具中打开失败作业时,错误选项卡中会显示含详细错误消息的黄色警报栏。
选择“ 下载 ”以下载所有必需的资源和输入流。 如果下载未完成,请选择“ 重试”。
下载完成后,选择“ 打开 ”以生成本地调试环境。 将打开一个新的调试解决方案,如果在 Visual Studio 中打开了现有的解决方案,请确保在调试之前保存并关闭它。
配置调试环境
注意
调试前,请务必检查“异常设置”窗口中的“公共语言运行时异常”(Ctrl+Alt+E)。
在新启动的 Visual Studio 实例中,可能找到用户定义的 C# 源代码,也可能找不到:
源代码包含在调试解决方案中
在以下两种情况下会捕获 C# 源代码:
用户代码在代码隐藏文件(在 U-SQL 项目中通常命名为
Script.usql.cs
)中定义。用户代码在 U-SQL 应用程序的 C# 类库项目中定义,并已注册为包含调试信息的程序集。
如果已将源代码导入解决方案,则可以使用 Visual Studio 调试工具(监视、变量等)来排查问题:
调试解决方案中不包含源代码
如果用户代码未包含在代码隐藏文件中,或者未使用 调试信息注册程序集,则源代码不会自动包含在调试解决方案中。 在这种情况下,需要执行额外的步骤来添加源代码:
右键单击“解决方案 'VertexDebug'”>“添加”>“现有项目...”,找到程序集源代码,并将项目添加到调试解决方案。
获取 FailedVertexDebugHost 项目的项目文件夹路径。
右键单击添加的程序集源代码项目,选择“属性”,选择左侧的“生成”选项卡,将复制的以 \bin\debug 结尾的路径粘贴为“输出”中的“输出路径”。>> 最终输出路径类似于
<DataLakeTemp path>\fd91dd21-776e-4729-a78b-81ad85a4fba6\loiu0t1y.mfo\FailedVertexDebug\FailedVertexDebugHost\bin\Debug\
。
完成这些设置后,按 F5 开始调试并设置断点。 还可以使用 Visual Studio 调试工具(监视、变量等)排查问题。
注意
每次修改代码以生成更新版 .pdb 文件后,都要重新生成程序集源代码项目。
提交作业
调试后,如果项目成功完成,输出窗口中显示以下消息:
The Program 'LocalVertexHost.exe' has exited with code 0 (0x0).
若要重新提交失败的作业:
对于包含代码隐藏解决方案的作业,请将 C# 代码复制到代码隐藏源文件(通常为
Script.usql.cs
)中。对于包含程序集的作业,请在调试解决方案中右键单击程序集源代码项目,并将更新的 .dll 程序集注册到 Azure Data Lake 目录中。
重新提交 U-SQL 作业。