文章編號: 166275 - 上次校閱: 2006年6月21日 - 版次: 1.3

如何偵錯原生程式碼在 Visual C++ 中的 Visual Basic 元件

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

Visual Basic 5.0 偵錯工具可讓您在設計階段之前編譯成.exe、.dll 或.ocx 偵錯程式碼。如果您正在偵錯的 Visual Basic 建立 COM 元件,您可以偵錯它們程序外執行多個專案的 Visual Basic 5.0 相同的執行個體中,或以在其中一個和執行在其他的 COM 元件中執行用戶端執行的 Visual Basic 5.0 的個別執行個體。

如果要偵錯您的元件,它們編譯之後您無法使用 Visual Basic 5.0 偵錯工具,因為它將只它們在設計階段偵錯。若要偵錯已編譯的 Visual Basic 元件,您必須使用 Visual C++ 5.0 偵錯工具的功能。以下是您可能需要偵錯已編譯的 Visual Basic 元件的情況下:
  • 如果您正在建立 ActiveX 控制項使用 Visual Basic 5.0 以外的其他容器中。
  • 在這類的 Microsoft 交易的應用程式的執行環境中伺服器位置只允許您執行已編譯的.dll 檔。
  • 如果您懷疑您的 Visual Basic 元件以不同方式比設計階段行為,它會編譯。
本文將告訴您如何執行這項操作在 Microsoft 開發 o 人 h 員 ? 工 u 具 ? Studio 環境中。您必須擁有 Visual Basic 5.0 及開發電腦上安裝的 Visual C++ 5.0 遵循本範例。

其他相關資訊

下列步驟假設您已經有 Visual Basic 5.0 建立標準執行檔 (.exe)、 ActiveX DLL (.dll)、 ActiveX 執行檔 (.exe) 或您想要偵錯的 ActiveX 控制項 (.ocx)。
  1. 在 Visual Basic 5.0 開啟您要偵錯的 Visual Basic 專案。從檔案] 功能表中,選擇產生 <yourproject>.exe。按一下 [選項] 按鈕,然後選取 [編譯] 標籤,選擇編譯原生程式碼,並建立符號偵錯資訊。然後選取 [確定],並 [確定] 重新編譯您的元件。
  2. 從 Visual C++ 5.0 檔案] 功能表中,選擇 [開啟舊檔的工作區]。在 [開啟舊檔的工作區] 對話方塊中設定為全部 files(*.*) 的檔案類型,然後選取 [已編譯的元件。
  3. 再次在 [Visual C++ 5.0 檔案] 功能表選擇 [開啟工作 (不開啟區),然後開啟 Visual Basic 模組 (.bas)、 表單 (.frm) 或類別 (.cls) 您想要偵錯。設定中斷點 (F9)]、 [監看]、 [步驟透過指示]、 [正常的程式中一樣的等等。 您也可能要顯示在偵錯環境中的變數資訊] 移至 Visual C++ 5.0 工具] 功能表,選取 [選項],然後選取 [偵錯] 索引標籤。在 [偵錯] 索引標籤放置一個檢查旁邊顯示 Unicode 字串。

    無法保存在個別執行緒上的變數。就會具有一個.ocx 的背景執行緒或隱藏的 vb 背景執行緒。Visual Basic 全域變數都是每個公寓或單一執行緒,因此您將不會看到它們在堆疊上是否位於另一個執行緒上。
    1. 標準 EXE: 從 Visual C++ 5.0 中的 [建置] 功能表選取開始偵錯,然後移至,或按下 F5 鍵。當 Visual Basic 編譯的元件達到設定中斷點的該行時,它將會在 Visual C++ 5.0 中停止,並可讓您執行一般的偵錯作業。
    2. ActiveX 執行檔、 的 DLL 或 OCX: 它是稍有不同的 DLL,因為您必須指定一個 exe 與偵錯。若要執行此動作從 [專案] 功能表中選取 [設定],然後按一下 [偵錯] 索引標籤。在偵錯工作階段的可執行檔文字方塊指定.exe 檔案會參考您的.dll。 現在請依照步驟 4a 這會啟動您的可執行檔和您.dll 和 Visual C++ 5.0 偵錯工具會變成您的.dll 中設定中斷點。
    3. 在 Microsoft 交易伺服器 (MTS) [執行 ActiveX DLL: 若要設定這向上選取的設定從 Visual C++ 5.0 [專案] 功能表,然後按一下 [偵錯] 索引標籤。在 [偵錯工作階段] 文字方塊中的可執行檔,指定 MTX.EXE。然後,在 [程式引數] 文字方塊中放置 /p: {00000000-0000-0000-0000-000000000000} 您會使用實際的 MTS 封裝識別碼。 取代 0您可以藉由檢查您的封裝交易伺服器總管中的屬性取得封裝識別碼。下列步驟 4a 其上方將會啟動 MTX.EXE 和您的.dll。現在執行會呼叫基底的用戶端.exe 到您的 COM MTS 和 Visual C++ 5.0 偵錯工具下執行的元件會變成您的.dll 中設定中斷點。
      1. 是 dll 呼叫系統路徑上??
      2. 重新有您不小心註冊 COM 物件的 dll 因而清掃出 MTS 修改登錄??
      3. 您可能有多份周圍,以 COM 物件的 dll 配置而在不會被載入的圖案中,於設定中斷點嗎?
      4. 同樣地為 3,可能您有多份您配置周圍的非 com dll ??
      5. 時發生一個表面上很愚蠢的技巧是您應該將您的 DLL 與符號資訊複製到 [MTS 目錄及從該處新增要在 MTS 封裝成 DLL 檔案總管。如果您執行一項不執行這項操作,[MTS 內的符號偵錯元件無法運作。

        此外,請確定開始向上您在偵錯工具中的複本之前,先殺掉所有正在執行 mtx.exe。當您啟動時,它不會執行,或它不會立即關機?請注意由 MTS.記錄任何事件日誌訊息若要從安全的起始點啟動,您可能要完全刪除您的應用程式,然後重新建立它,重新安裝您的元件 dll 等等。
    4. 在網際網路資訊伺服器 (IIS) [執行 ActiveX DLL: 因為 IIS 會執行當作 NT 服務,您必須給予您自己扮演的操作系統一部分的使用權限。如果要執行此動作前往 [NT 系統管理工具] 和 [選取的使用者管理員 」。如果使用 NT Server 中的網域使用者管理員,確定您已選取的電腦名稱作為網域從 [檔案] 功能表。然後,使用者權限從 [原則] 功能表選擇 []。在 [使用者權限] 對話方塊放置顯示進階使用者權限] 旁邊的核取,然後從下拉式方塊中選取 ["作為作業系統的一部分 」]。按一下 [新增] 按鈕及文字] 區域中的"domainxxx\userxxx 」 中的型別或從清單方塊中選取您的使用者名稱。按一下 [確定],您現在應該有正確的權限。在 Visual C++ 5.0 中啟動偵錯工作階段,請到 [建置] 功能表,選取開始偵錯,然後附加至處理序]。放置一個檢查旁邊顯示系統處理程序然後選取 inetinfo,再按 [確定]。現在載入付到您的 ActiveX 元件呼叫一個用戶端.htm 或.asp 檔案。如果您遵循上述步驟 3 中的指示,您現在應該要能夠逐步解說 Visual Basic 程式碼。
    附註 具有下列步驟 4d 本文中方針,叫用中斷點時不被記錄。某些嘗試後您可能發現,要被叫用中斷點,它是載入其他 DLL 專案設定中進行偵錯的 DLL 所需。此外,中斷點不會叫用呼叫 HTML 網頁的第一次,除非您設定中斷點之後將附加至處理序進行。它已在對等的 Web 服務與 Visual Studio SP2 的 Windows NT 4.0 工作站 SP3 下進行測試。
另一個的 Visual C++ 功能是能夠執行跨處理序和跨電腦偵錯。如果您在偵錯工具中執行,並且呼叫已經偵錯資訊的.dll,它會自動啟動偵錯工具和來源的另一個執行個體,使您可以偵錯到該。

請注意是否針對大小或速度最佳化編譯.exe,無作用程式碼行數就會編譯專案中。


這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
關鍵字:?
kbmt kbhowto kbusage KB166275 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:166275? (http://support.microsoft.com/kb/166275/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。