使用 Visual Studio Debugger 附加至執行中處理序
本主題示範如何附加到執行中處理序;如何附加到遠端電腦上的處理序;以及如何疑難排解附加錯誤。
為何要對附加的處理序進行偵錯?
Visual Studio 偵錯工具可以附加到正在 Visual Studio 外部執行的處理序。您可以使用這個附加功能,完成下列目的:
偵錯不是使用 Visual Studio 建立的應用程式。
同時偵錯多個處理序 您也可透過在一個方案內啟動多個專案的方式偵錯多個處理序
偵錯正在遠端電腦上執行的處理序。
偵錯執行於無法輕易從 Visual Studio 啟動的個別處理序內的 DLL,例如,與網際網路資訊服務一起執行的某項服務或 ISAPI DLL
在 Visual Studio 外部執行的處理序損毀時,自動啟動偵錯工具。這是 Just-In-Time 偵錯
在您附加至程式後,便可使用偵錯工具的執行命令列、檢查程式狀態等等。如需詳細資訊,請參閱在 Visual Studio 中偵錯一個或多個處理序、在 Visual Studio 中啟動、中斷、逐步執行、執行程式碼以及停止偵錯 和在偵錯工具中檢視資料。根據程式建置時是否包含偵錯資訊以及您是否能存取程式的原始程式碼,還有 Common Language Runtime JIT 編譯器是否會追蹤偵錯資訊,可能會對檢查程式狀態的能力有所限制。
C++ 注意事項 |
---|
偵錯工具若要附加至以 C++ 撰寫的程式碼,該程式碼必須發出 DebuggableAttribute。您可以使用 /ASSEMBLYDEBUG 連結器選項連結,將其自動加入程式碼。 |
警告 |
---|
若要附加至以 JavaScript 撰寫的 Windows 市集應用程式,您必須先啟用應用程式的偵錯功能。請參閱 Windows 開發人員中心的 Attach the debugger。 |
附加至執行中的處理序
在 [偵錯] 功能表中,選取 [附加至處理序]。
請在 [附加至處理序] 對話方塊的 [可使用的處理序] 清單中,尋找您要附加的程式。
如果您要進行偵錯的程式正在另一部電腦上執行,請使用 [限定詞] 清單方塊選取或指定遠端電腦。如需詳細資訊,請參閱遠端偵錯和診斷。
如果該處理序正在不同的使用者帳戶下執行,請選取 [顯示所有使用者的處理序] 核取方塊。
如果您透過 [遠端桌面連線] 進行連接,請選取 [顯示所有工作階段中的處理序] 核取方塊。
在 [附加至] 方塊中,確定其中已列出您要偵錯的程式碼類型。預設的 [自動] 設定會自動判斷您要偵錯的程式碼類型。如果自動設定不適用:
按一下 [選取]。
在 [選取程式碼類型] 對話方塊中,按一下 [偵錯這些程式碼類型],然後選取要偵錯的類型。
按一下 [確定]。
按一下 [附加]。
[可使用的處理序] 清單會在您開啟 [處理序] 對話方塊時自動顯示。當對話方塊開啟時,處理序可以在背景中啟動和停止。但內容不一定是最新的。您可以隨時按 [重新整理] 以重新整理該清單,查看目前的處理序清單。
偵錯時,您可以附加至多個程式,但是無論在任何時間,偵錯工具一次只能有一個使用中程式。您可以在 [偵錯位置] 工具列或 [處理序] 視窗中設定使用中的程式。
注意事項 若要將偵錯工具附加至以 C++/CLI 撰寫的 Managed 程式碼,該程式碼必須發出 DebuggableAttribute。您可以使用 /ASSEMBLYDEBUG 連結器選項連結,將其自動加入程式碼。
如果您嘗試附加至未受信任的使用者帳戶所擁有的處理序,會出現安全性警告對話方塊確認訊息。如需詳細資訊,請參閱安全性警告:附加至未受信任的使用者帳戶所擁有的處理序可能會造成危險。如果下面的資訊看起來有問題,或者您並不確定,請不要附加至此處理序。
在某些情況下,在遠端桌面 (終端機服務) 工作階段中進行偵錯時,[可使用的處理序 ] 清單並不會顯示所有可使用的處理序。在 Windows Server 2003 或更新版本中,如果您是以受限制的使用者身分執行 Visual Studio,則 [可使用的處理序] 清單不會顯示在工作階段 0 中執行的處理序,因為工作階段 0 是用於服務以及其他包括 w3wp.exe 的伺服器處理序。可藉由使用系統管理員帳戶來執行 Visual Studio,或是從伺服器主控台 (而非終端機服務工作階段) 執行 Visual Studio,來解決這個問題。如果這些解決方法都沒有效,第三個方法就是從 Windows 命令列執行 vsjitdebugger.exe -p ProcessId 以連結至流程。您可以使用 tlist.exe 來判斷處理序 ID。若要取得 tlist.exe,您可以從 https://go.microsoft.com/fwlink/?LinkId=168279 下載並安裝 Windows 偵錯工具。
若要停止偵錯附加的處理序,請按一下 [偵錯]/[停止偵錯],或停止執行附加的處理序。
附加至遠端電腦上的處理序
使用 [附加至處理序] 對話方塊時,您可以選取已針對遠端偵錯設定的其他電腦。如需詳細資訊,請參閱在裝置上設定遠端工具。當您選取了遠端電腦時,您可以檢視該電腦上正在執行的可使用的處理序清單,並附加至其中一個或多個處理序進行偵錯。
若要選取遠端電腦:
在 [附加至處理序] 對話方塊中,從 [傳輸] 清單選取適當的連接類型。[預設值] 是適合大部分情況的正確設定
利用下列其中一種方法,使用 [限定詞] 清單方塊選擇遠端電腦名稱:
在 [限定詞] 清單方塊中輸入名稱。
按一下附加至 [限定詞] 清單方塊的下拉箭號,然後從下拉式清單中選取電腦名稱。
按一下 [限定詞] 清單旁的 [尋找] 按鈕,開啟 [選取遠端偵錯工具連接] 對話方塊。[選取遠端偵錯工具連接] 對話方塊會列出位於您的本機子網路上的所有裝置,以及透過乙太網路纜線直接附加至電腦的裝置。按一下您想要的電腦或裝置,然後按一下 [選取]。
[傳輸] 設定在偵錯工作階段之間是保持相同的。[限定詞] 設定只有在使用該限定詞成功產生偵錯連接時,才會在偵錯工作階段之間保持相同。
疑難排解附加錯誤
當偵錯工具附加至執行中的處理序時,該處理序可以包含一種或多種程式碼類型。偵錯工具可附加的程式碼類型會在 [選取程式碼類型] 對話方塊中顯示並供您選取。
注意事項 |
---|
若要將偵錯工具附加至以 C++ 撰寫的 Managed 程式碼,該程式碼必須發出 DebuggableAttribute。您可以使用 /ASSEMBLYDEBUG 連結器選項連結,將其自動加入程式碼。 |
警告 |
---|
若要附加至以 JavaScript 撰寫的 Windows 市集應用程式,您必須先啟用應用程式的偵錯功能。請參閱 Windows 開發人員中心的 Attach the debugger。 |
有時候,偵錯工具可以成功附加至一種程式碼類型,而無法附加至另一種程式碼類型。如果您嘗試附加至遠端電腦上正在執行的處理序,可能會發生這種狀況。遠端電腦可能為某些程式碼類型安裝了遠端偵錯元件,但沒有安裝其他程式碼類型的遠端偵錯元件。如果您嘗試附加至兩個或多個處理序以進行直接的資料庫偵錯,也可能會發生這種狀況。(SQL 偵錯僅支援附加至單一處理序)。
如果偵錯工具能附加至某些程式碼類型 (而非所有程式碼類型),您可能會看到識別無法附加之類型的訊息。
如果偵錯工具成功附加到至少一種程式碼類型,您可以繼續偵錯該處理序。您只能偵錯已附加成功的程式碼類型。上述範例訊息顯示該指令碼類型附加失敗。因此,您無法在處理序內偵錯指令碼。處理序中的指令碼仍可執行,但是您將無法在指令碼內設定中斷點、檢視資料,或執行其他的偵錯作業。
如果您需要更多相關資訊以暸解偵錯工具無法附加至程式碼類型的原因,可以嘗試重新附加至該程式碼。
取得程式碼類型為何無法附加的相關資訊
與處理序中斷連結。在 [偵錯] 功能表上按一下 [中斷所有連結]。
重新附加至處理序,並只選取單一程式碼類型。
在 [附加至處理序] 對話方塊的 [可使用的處理序] 清單中,選取該處理序。
按一下 [選取]。
在 [選取程式碼類型] 對話方塊中,選取 [偵錯這些程式碼類型] 以及之前附加失敗的程式碼類型。清除任何其他程式碼。
按一下 [確定]。[選取程式碼類型] 對話框會關閉。
在 [附加至處理序] 對話方塊中按一下 [附加]。
這時,該附加將完全失敗,您將取得特定的錯誤訊息。
請參閱
概念
Visual Studio 中的 Just-In-Time 偵錯