對 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 程式設計指南。
實際上,任何程式代碼都可能需要偵錯,但很難在具有有限記錄檔的雲端上使用自定義程式代碼對分散式作業進行偵錯。 Azure Data Lake Tools for Visual Studio 提供了一個稱為「頂點失敗偵錯」的功能,該功能可協助您更輕鬆地針對您的自訂程式碼中發生的錯誤進行偵錯。 當 U-SQL 作業失敗時,服務會保留失敗狀態,而工具會協助您將雲端失敗環境下載至本機電腦進行偵錯。 本機下載會擷取整個雲端環境,包括任何輸入資料和使用者程式碼。
下列影片示範 Azure Data Lake Tools for Visual Studio 中的頂點失敗偵錯。
重要
Visual Studio 需要下列兩個更新以使用此功能:Microsoft Visual C++ 2015 可轉散發更新 3 和適用於 Windows 的通用 C 執行階段。
將失敗的頂點下載至本機電腦
當您在 Azure Data Lake Tools for Visual Studio 中開啟失敗的作業時,您會看到一個黃色的警示列,[錯誤] 索引標籤中有詳細的錯誤訊息。
選取 [下載 ] 以下載所有必要的資源和輸入數據流。 如果下載未完成,請選取 [重試]。
在下載完成後選取 [開啟 ],以產生本機偵錯環境。 將開啟新的偵錯解決方案,如果您在 Visual Studio 中開啟現有的解決方案,請確定在偵錯之前先儲存並予以關閉。
設定偵錯環境
注意
在進行偵錯之前,請確定核取 [例外狀況設定] 視窗中的 [Common Language Runtime 例外狀況] \(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 作業。