调试失败 U-SQL 作业的用户定义 C# 代码

重要

Azure Data Lake Analytics于 2024 年 2 月 29 日停用。 通过此公告了解更多信息。

对于数据分析,组织可以使用 Azure Synapse AnalyticsMicrosoft 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 工具中打开失败作业时,错误选项卡中会显示含详细错误消息的黄色警报栏。

  1. 选择“ 下载 ”以下载所有必需的资源和输入流。 如果下载未完成,请选择“ 重试”。

  2. 下载完成后,选择“ 打开 ”以生成本地调试环境。 将打开一个新的调试解决方案,如果在 Visual Studio 中打开了现有的解决方案,请确保在调试之前保存并关闭它。

USQL 中Data Lake Analytics作业的屏幕截图,其中突出显示了“下载”按钮。

配置调试环境

注意

调试前,请务必检查“异常设置”窗口中的“公共语言运行时异常”(Ctrl+Alt+E)。

用户定义的 C# 源代码的屏幕截图,其中显示了设置了公共语言运行时异常的异常设置。

在新启动的 Visual Studio 实例中,可能找到用户定义的 C# 源代码,也可能找不到:

  1. 我可以在解决方案中查找源代码

  2. 我在解决方案中找不到源代码

源代码包含在调试解决方案中

在以下两种情况下会捕获 C# 源代码:

  1. 用户代码在代码隐藏文件(在 U-SQL 项目中通常命名为 Script.usql.cs)中定义。

  2. 用户代码在 U-SQL 应用程序的 C# 类库项目中定义,并已注册为包含调试信息的程序集。

如果已将源代码导入解决方案,则可以使用 Visual Studio 调试工具(监视、变量等)来排查问题:

  1. F5 启动调试。 代码将一直运行,直到它因异常而停止。

  2. 打开源代码文件并设置断点,按 F5 逐步调试代码。

    用户定义代码的屏幕截图,其中设置了断点,其中突出显示了一行处显示异常。

调试解决方案中不包含源代码

如果用户代码未包含在代码隐藏文件中,或者未使用 调试信息注册程序集,则源代码不会自动包含在调试解决方案中。 在这种情况下,需要执行额外的步骤来添加源代码:

  1. 右键单击“解决方案 'VertexDebug'”>“添加”>“现有项目...”,找到程序集源代码,并将项目添加到调试解决方案。

    Visual Studio 中解决方案资源管理器的屏幕截图,其中显示了 VertexDebug 解决方案。

  2. 获取 FailedVertexDebugHost 项目的项目文件夹路径。

  3. 右键单击添加的程序集源代码项目,选择“属性”,选择左侧的“生成”选项卡,将复制的以 \bin\debug 结尾的路径粘贴为“输出”中的“输出路径”。>> 最终输出路径类似于 <DataLakeTemp path>\fd91dd21-776e-4729-a78b-81ad85a4fba6\loiu0t1y.mfo\FailedVertexDebug\FailedVertexDebugHost\bin\Debug\

    Visual Studio Code中“生成”选项卡的屏幕截图,其中“输出”下突出显示了出站路径。

完成这些设置后,按 F5 开始调试并设置断点。 还可以使用 Visual Studio 调试工具(监视、变量等)排查问题。

注意

每次修改代码以生成更新版 .pdb 文件后,都要重新生成程序集源代码项目。

提交作业

调试后,如果项目成功完成,输出窗口中显示以下消息:

The Program 'LocalVertexHost.exe' has exited with code 0 (0x0).

输出窗口的屏幕截图,其中突出显示了完成行。

若要重新提交失败的作业:

  1. 对于包含代码隐藏解决方案的作业,请将 C# 代码复制到代码隐藏源文件(通常为 Script.usql.cs)中。

  2. 对于包含程序集的作业,请在调试解决方案中右键单击程序集源代码项目,并将更新的 .dll 程序集注册到 Azure Data Lake 目录中。

  3. 重新提交 U-SQL 作业。

后续步骤