调试用户定义 C# 代码以解决 U-SQL 作业失败问题

重要

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 Update 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. Right-Click 添加的程序集源代码项目 > 属性,选择左侧的 “生成”选项卡,并粘贴以 \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 作业。

后续步骤