逐步解說:使用 IntelliTrace 偵錯 SharePoint 應用程式
藉由使用 IntelliTrace,您可以更輕鬆地對 SharePoint 解決方案進行偵錯。 傳統偵錯工具目前只會提供解決方案的快照集。 不過,您可以使用 IntelliTrace 來檢閱您解決方案中過去發生的事件,以及發生的內容,並瀏覽至程式碼。
本逐步解說示範如何使用 Microsoft Monitoring Agent 從已部署的應用程式收集 IntelliTrace 資料,對 Visual Studio 中的 SharePoint 專案進行偵錯。 若要分析該資料,您必須使用 Visual Studio Enterprise。 此專案會納入功能接收器,當功能啟動時,會將工作新增至 [工作] 清單,並將公告新增至 [公告] 清單。 停用此功能時,工作會標示為已完成,並將第二個公告新增至 [公告] 清單。 不過,此程序包含邏輯錯誤,讓專案無法正確執行。 藉由使用 IntelliTrace,您將會找到錯誤並加以更正。
適用於:本主題中的資訊適用於在 Visual Studio 中建立的 SharePoint 解決方案。
本逐步解說將說明下列工作:
-
注意
在下列指示的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置: 您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。 如需詳細資訊,請參閱將 IDE 個人化。
必要條件
您需要下列元件才能完成這個逐步解說:
支援的 Windows 和 SharePoint 版本。
Visual Studio Enterprise。
建立功能接收器
首先,您會建立具有功能接收器的空白 SharePoint 專案。
建立以您已安裝 SharePoint 版本為目標的 SharePoint 解決方案專案,並將其命名為 IntelliTraceTest。
[SharePoint 自訂精靈] 隨即出現,您可以在其中指定專案的 SharePoint 網站和解決方案的信任層級。
選擇 [部署為伺服器陣列解決方案] 選項按鈕,然後選擇 [完成] 按鈕。
IntelliTrace 只會在伺服器陣列解決方案上運作。
在 [方案總管] 中,開啟 [功能] 節點的捷徑功能表,然後選擇 [新增功能]。
Feature1.feature 隨即出現。
開啟 Feature1.feature 的捷徑功能表,然後選擇 [新增事件接收器],將程式碼模組新增至功能。
將程式碼新增至功能接收器
接下來,將程式碼新增至功能接收器中的兩個方法:FeatureActivated
和 FeatureDeactivating
。 每當 SharePoint 中啟用或停用功能時,這些方法都會分別觸發。
在
Feature1EventReceiver
類別頂端,新增下列程式碼,其會宣告可指定 SharePoint 網站和子網站的變數:以下列程式碼取代
FeatureActivated
方法:public override void FeatureActivated(SPFeatureReceiverProperties properties) { try { using (SPSite site = new SPSite(siteUrl)) { using (SPWeb web = site.OpenWeb(webUrl)) { // Reference the lists. SPList announcementsList = web.Lists["Announcements"]; SPList taskList = web.Lists["Tasks"]; // Add an announcement to the Announcements list. SPListItem listItem = announcementsList.Items.Add(); listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName; listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + DateTime.Now.ToString(); listItem.Update(); // Add a task to the Task list. SPListItem newTask = taskList.Items.Add(); newTask["Title"] = "Deactivate feature: " + properties.Definition.DisplayName; newTask.Update(); } } } catch (Exception e) { Console.WriteLine("Error: " + e.ToString()); } }
以下列程式碼取代
FeatureDeactivating
方法:public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { // The following line induces an error to demonstrate debugging. // Remove this line later for proper operation. throw new System.InvalidOperationException("A serious error occurred!"); try { using (SPSite site = new SPSite(siteUrl)) { using (SPWeb web = site.OpenWeb(webUrl)) { // Reference the lists. SPList taskList = web.Lists["Tasks"]; SPList announcementsList = web.Lists["Announcements"]; // Add an announcement that the feature was deactivated. SPListItem listItem = announcementsList.Items.Add(); listItem["Title"] = "Deactivated Feature: " + properties.Definition.DisplayName; listItem["Body"] = properties.Definition.DisplayName + " was deactivated on: " + DateTime.Now.ToString(); listItem.Update(); // Find the task that the feature receiver added to the Task list when the // feature was activated. SPQuery qry = new SPQuery(); qry.Query = "<Where><Contains><FieldRef Name='Title' /><Value Type='Text'>Deactivate</Value></Contains></Where>"; SPListItemCollection taskItems = taskList.GetItems(qry); foreach (SPListItem taskItem in taskItems) { // Mark the task as complete. taskItem["PercentComplete"] = 1; taskItem["Status"] = "Completed"; taskItem.Update(); } } } } catch (Exception e) { Console.WriteLine("Error: " + e.ToString()); } }
測試專案
現在程式碼已新增至功能接收器,而且資料收集器正在執行、部署及執行 SharePoint 解決方案,以測試其是否正常運作。
重要
針對此範例,FeatureDeactivating 事件處理常式中會擲回錯誤。 稍後在本逐步解說中,您會使用資料收集器建立的 .iTrace 檔案來找出此錯誤。
將解決方案部署至 SharePoint,然後在瀏覽器中開啟 SharePoint 網站。
此功能會自動啟動,導致其功能接收者新增公告和工作。
顯示 [公告] 和 [工作] 清單的內容。
[公告] 清單應該有名為啟動功能:IntelliTraceTest_Feature1 的新公告,而 [工作] 清單應該有名為停用功能:IntelliTraceTest_Feature1 的新工作。 如果遺漏其中一個項目,請確認功能是否已啟動。 如果未啟動,請加以啟動。
執行下列步驟以停用功能:
在 SharePoint 的 [網站動作] 功能表上,選擇 [網站設定]。
在 [網站動作] 底下,選擇 [管理網站功能] 連結。
在 IntelliTraceTest Feature1 旁邊,選擇 [停用] 按鈕。
在 [警告] 頁面上,選擇 [停用此功能] 連結。
FeatureDeactivating() 事件處理常式會擲回錯誤。
使用 Microsoft Monitoring Agent 收集 IntelliTrace 資料
如果您在執行 SharePoint 的系統上安裝 Microsoft Monitoring Agent,您可以使用比 IntelliTrace 傳回的一般資訊更具體的資料來偵錯 SharePoint 解決方案。 代理程式可在 Visual Studio 外部運作,方法是使用 PowerShell Cmdlet 在 SharePoint 解決方案執行時擷取偵錯資訊。
注意
本節中的組態資訊專屬於此範例。 如需其他組態選項的詳細資訊,請參閱使用 IntelliTrace 獨立收集器。
在執行 SharePoint 的電腦上,設定 Microsoft Monitoring Agent 並開始監視您的解決方案。
停用功能:
在 SharePoint 的 [網站動作] 功能表上,選擇 [網站設定]。
在 [網站動作] 底下,選擇 [管理網站功能] 連結。
在 IntelliTraceTest Feature1 旁邊,選擇 [停用] 按鈕。
在 [警告] 頁面上,選擇 [停用此功能] 連結。
發生錯誤 (在此案例中是因為 FeatureDeactivating() 事件處理常式中擲回的錯誤)。
在 PowerShell 視窗中,執行 Stop-WebApplicationMonitoring 命令來建立 .iTrace 檔案、停止監視,然後重新啟動 SharePoint 解決方案。
Stop-WebApplicationMonitoring "<SharePointSite>\<SharePointAppName>"
偵錯和修正 SharePoint 解決方案
現在,您可以在 Visual Studio 中檢視 IntelliTrace 記錄檔,尋找 SharePoint 解決方案中的錯誤並加以修正。
在 Visual Studio 的 \IntelliTraceLogs 資料夾中,開啟 .iTrace 檔案。
[IntelliTrace 摘要] 頁面隨即出現。 因為錯誤未處理,因此 SharePoint 相互關聯識別碼 (GUID) 會出現在 [分析] 區段未處理的例外狀況區域中。 如果您想要檢視發生錯誤的呼叫堆疊,請選擇 [呼叫堆疊] 按鈕。
選擇 [偵錯例外狀況] 按鈕。
如果出現提示,請載入符號檔。 在 [IntelliTrace] 視窗中,例外狀況會醒目提示為「擲回:發生嚴重錯誤!」。
在 IntelliTrace 視窗中,選擇例外狀況以顯示失敗的程式碼。
開啟 SharePoint 解決方案,然後註解化或移除 FeatureDeactivating() 程序頂端的 throw 陳述式,以修正錯誤。
在 Visual Studio 中重建解決方案,然後將其重新部署至 SharePoint。
執行下列步驟以停用功能:
在 SharePoint 的 [網站動作] 功能表上,選擇 [網站設定]。
在 [網站動作] 底下,選擇 [管理網站功能] 連結。
在 IntelliTraceTest Feature1 旁邊,選擇 [停用] 按鈕。
在 [警告] 頁面上,選擇 [停用此功能] 連結。
開啟 [工作] 清單,並確認 [停用] 工作的 [狀態] 值為 [已完成],且其 [完成率] 值為 100%。
程式碼現在會正常執行。