共用方式為


逐步解說:偵錯包含 Managed 程式碼和機器碼的方案

更新:2007 年 11 月

本逐步解說將提供一些步驟,以便偵錯同時包含 Managed (.NET Compact Framework) 和原生元件的方案。Visual Studio 不支援這種裝置應用程式的 Interop 偵錯。也就是說,您不可以同時附加原生和 Managed 偵錯工具。

針對偵錯同時結合原生和 Managed 項目的方案,建議的技巧是先附加某個區段 (例如 Managed 區段) 所需的偵錯工具,然後中斷連結該偵錯工具,並且視需要附加其他偵錯工具。您可以重複進行這些中斷連結/附加的步驟,逐步執行您的程式。

注意事項:

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

此逐步解說是使用 [Visual C# 開發設定] 撰寫。它包含以下各節:

  • 啟用 Managed 偵錯工具的附加

  • 啟動應用程式

  • 在機器碼中設定中斷點

  • 附加原生偵錯工具

  • 執行至原生中斷點

  • 附加 Managed 偵錯工具

  • 在 Managed 程式碼中設定中斷點

  • 執行至 Managed 中斷點

  • 結論

必要條件

本逐步解說會仰賴另一個逐步解說所建置的方案:逐步解說:Hello World:智慧型裝置的 COM Interop 範例。請確定已經建置並執行此逐步解說。

啟用 Managed 偵錯工具的附加

根據預設,裝置 (包括模擬器) 並不允許 Managed 偵錯工具附加至已在執行中的處理序。您通常會在同時包含 Managed 程式碼和機器碼的裝置方案中,遇到將 Managed 偵錯工具附加至已在執行中之處理序的情況。

第一個步驟,就是要將裝置設定為允許 Managed 偵錯工具附加至已在執行的處理序。您可以在裝置上設定登錄機碼 (Registry Key),以進行此步驟。

注意事項:

設定機碼只會影響附加至已在執行中的 Managed處理序。它並不會影響使用 [以偵錯開始] (F5) 啟動專案。不過,如果您在 [以偵錯開始] 後中斷連結,就會需要這個處理序以重新附加並再次啟動偵錯。

若要讓 Managed 偵錯工具附加至執行中的處理序

  1. 在 Windows 的 [開始] 功能表中,依序指向 [所有程式]、[Microsoft Visual Studio 2008]、[Visual Studio 遠端工具],再按一下 [遠端登錄編輯程式]。

  2. 在 [選取 Windows CE 裝置] 視窗中,展開 [Windows Mobile PC 5.0 Pocket PC SDK],然後按一下 [Windows Mobile 5.0 Pocket PC 模擬器]。這個就是此逐步解說的目標裝置。

  3. 按一下 [確定]。

    [正在連接到裝置] 處理視窗就會開啟,接著開啟 [裝置模擬器] 和 [Windows CE 遠端登錄編輯程式]。

  4. 在 [登錄編輯程式] 中,展開 [Windows Mobile 5.0 Pocket PC 模擬器],然後建立下列機碼:HKEY_LOCAL_MACHINE\SOFTWARE\Microsot\.NETCompactFramework\Managed Debugger。

    以滑鼠右鍵按一下 [.NETCompactFramework]、指向 [新增],然後按一下 [機碼],即可建立機碼。

    請注意,"Managed" 和 "Debugger" 之間有一個空格。

  5. 建立名為 AttachEnabled 的 DWORD。

    以滑鼠右鍵按一下 [Managed Debugger]、指向 [新增],然後按一下 [DWORD 值],即可建立 DWORD。

  6. 將 [名稱] 設定為 [AttachEnabled],並將 [值] 設定為 1。

    注意事項:

    設定這個裝置偵錯機碼將會顯著減低效能。當您不要偵錯時,請將此資料值設為 0,以停用此功能。

  7. 將 [裝置模擬器] 保持開啟,讓其餘步驟可保留登錄設定。您可以關閉 [登錄編輯程式]。

啟動應用程式

下一個步驟就是啟動 InteropSolution 應用程式。

若要啟動應用程式

  1. 開啟您在逐步解說:Hello World:智慧型裝置的 COM Interop 範例中建立的方案。

    確定 [Windows Mobile 5.0 Pocket PC 模擬器] 出現在工具列的 [目標裝置] 方塊中。

  2. 在 Visual Studio 的 [偵錯] 功能表上,按一下 [啟動偵錯] 或按下 F5。

    這個步驟會立即將原生專案 HelloCOMObject 部署至模擬器上,而不需使用者的其他介入。

  3. 當 [部署 SayHello] 對話方塊開啟時,選取 [Windows Mobile 5.0 Pocket PC 模擬器],然後按一下 [部署]。

    這個步驟就會部署 Managed 專案。

    此應用程式會在模擬器中開啟。請先不要按下按鈕。

在機器碼中設定中斷點

下一個步驟就是要在機器碼中設定中斷點,以準備附加原生偵錯工具。

若要在機器碼中設定中斷點

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [Hello.cpp],然後按一下 [檢視程式碼]。

  2. 在 [程式碼編輯器] 中,按一下以 *text 所開始之程式行所在的左邊界,以便插入中斷點。

    中斷點符號就會顯示為含有驚嘆號的空心圓圈,表示目前無法解析該中斷點。這是因為目前它缺少適當的符號和來源。

  3. 在 Visual Studio 的 [偵錯] 功能表中,指向 [視窗],然後按一下 [模組]。

    [模組] 視窗會顯示直到此點已載入的所有模組。例如,Managed 應用程式 SayHello.exe。請注意,原生 HelloCOMObject.dll 尚未載入,因為您還沒有按一下應用程式中的按鈕。

附加原生偵錯工具

下一個步驟就是要中斷連結 Managed 偵錯工具,如此您才可以附加原生偵錯工具。回想一下,這兩種偵錯工具無法同時針對裝置專案附加。以下是每當需要從原生切換成 Managed 偵錯工具時所使用的步驟。

若要附加原生偵錯工具

  1. 在 Visual Studio 的 [偵錯] 功能表上,按一下 [中斷所有連結]。

    這個步驟會中斷連結 Managed 偵錯工具,但會讓應用程式繼續執行。

  2. 在 [偵錯] 功能表上,按一下 [附加至處理序]。

  3. 在 [傳輸] 方塊中,選取 [智慧型裝置]。

  4. 若要填入 [限定詞] 方塊,請按一下 [瀏覽]。

  5. 在 [連接到裝置] 對話方塊中,選取 [Windows Mobile 5.0 Pocket PC 模擬器],然後按一下 [連接]。

  6. 若要填入 [附加至] 方塊,請按一下 [選取]。

  7. 在 [選取程式碼類型] 對話方塊中,選取 [偵錯這些程式碼類型]、清除 [Managed] 核取方塊、選取 [原生] 核取方塊,然後按一下 [確定]。

  8. 在 [可使用的處理序] 方塊中,選取 [SayHello.exe],然後按一下 [附加]。

    您現在就已附加原生偵錯工具了。

執行至原生中斷點

您現在已準備好前進至在機器碼中設定的中斷點。當您再次檢查 [模組] 視窗時,便會看見原生模組已經出現了。不過,尚未載入 HelloCOMObject.dll,因為您尚未按下 button1。

注意事項:

如果您先前執行過這個逐步解說,可能已經載入了偵錯符號,那麼您就可以略過這些步驟。如果沒有,下一節將會提供載入這些符號的步驟。

若要繼續執行至原生中斷點

  1. 請在 [裝置模擬器] 表單上,按一下 button1。

    Hello World! 訊息就會顯示在表單上,而 [hellocomobject.dll] 則會顯示在 [模組] 視窗中。

    如果 [hellocomobject.dll] 的 [符號狀態] 欄未顯示 [已載入符號],請執行下列步驟:

    1. 以滑鼠右鍵按一下 [hellocomobject.dll],然後按一下 [載入符號]。

    2. 在 [尋找符號] 對話方塊中,巡覽至 InteropSolution\HelloCOMObject\Windows Mobile 5.0 Pocket PC SDK (ARMV4)\Debug\HelloCOMObject.pdb。

    3. 按一下 [開啟]。

      [符號狀態] 欄就會變更為 [已載入符號],而且中斷點指示區現在會將中斷點顯示為已解析。

  2. 在 [裝置模擬器] 的表單上,按一下 [Hello World!] 視窗中的 [確定],然後再次按下 button1。

    中斷點指示區就會顯示執行已在中斷點停止。

  3. 在 [偵錯] 功能表上,按一下 [逐步執行] 或按下 F11。

    請注意,執行會移至下一行。這就表示,您現在可以逐步執行方案的原生部分。

附加 Managed 偵錯工具

下一個步驟就是要中斷連結原生偵錯工具,如此您才可以附加至 Managed 偵錯工具。回想一下,這兩種偵錯工具無法同時針對裝置專案附加。以下是每當需要從原生切換成 Managed 偵錯工具時所使用的步驟。

若要附加 Managed 偵錯工具

  1. 在 Visual Studio 的 [偵錯] 功能表上,按一下 [中斷所有連結]。

    這個步驟會中斷連結原生偵錯工具,但應用程式會繼續執行。

  2. 在 [偵錯] 功能表上,按一下 [附加至處理序],然後確定 [傳輸] 方塊含有 [智慧型裝置]。

  3. 按一下 [選取],選取 [Windows Mobile 5.0 Pocket PC 模擬器],然後再按一下 [連接] 填入 [限定詞] 方塊。

  4. 若要填入 [附加至] 方塊,請按一下 [選取],選取 [偵錯這些程式碼類型],核取 [Managed] 方塊,清除 [原生] 方塊,然後按一下 [確定]。

    如果出現一則訊息,提醒您 Managed 和原生偵錯不相容,請按一下 [確定]。

  5. 在 [可使用的處理序] 方塊中,選取 [SayHello.exe],然後按一下 [附加]。

    如此就會附加 Managed 偵錯工具。

在 Managed 程式碼中設定中斷點

下一個步驟就是要在 Managed 程式碼中設定中斷點,以準備附加 Managed 偵錯工具。

若要在 Managed 程式碼中設定中斷點

  1. 在 [方案總管] 中,以滑鼠右鍵按一下 [Form1.cs],然後按一下 [檢視程式碼]。

  2. 在 string text; 程式行插入中斷點。

執行至 Managed 中斷點

您現在已準備好前進至您在 Managed 程式碼中設定的中斷點。

若要繼續執行至 Managed 中斷點

  • 請在 [裝置模擬器] 中,按一下 button1。

    執行就會在中斷點停止。

結論

基於效能考量,當您不再需要將 Managed 偵錯工具附加至已在執行的處理序時,請務必將裝置的登錄機碼重設為 0。

請參閱

工作

HOW TO:附加至 Managed 裝置處理序

HOW TO:變更裝置登錄設定

其他資源

偵錯裝置專案

Visual Studio 偵錯