[英]Visual Studio: auto attach to a process when the process is spawned
我想在生成的過程中附加到進程(a.exe),是否可以使用VS? 我只知道這個過程的名稱。 實際上我想要完成的是在c#代碼中設置一個斷點,但代碼屬於另一個可執行文件,它將由當前運行的應用程序(c.exe)啟動。 代碼在初始化期間,因此我無法手動執行連接。
當我以前遇到這種情況(並且我控制了兩個進程)時,我發現一個不錯的解決方法是在產生進程的入口點調用Debugger.Launch() 。 然后,VS將彈出一個對話框,讓您附加到該過程。
請參閱MSDN文章, 如何:自動啟動調試器 - 這將允許人們跳過過多的繁忙工作單擊確認對話框[不關閉UAC或其他混亂]。 本文列出了以下步驟:
- 啟動注冊表編輯器(regedit)。
- 在注冊表編輯器中,打開HKEY_LOCAL_MACHINE文件夾。
- 導航到HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows NT \\ currentversion \\ image文件執行選項。
- 在“ 映像文件執行選項”文件夾中,找到要調試的應用程序的名稱,例如myapp.exe 。 如果找不到要調試的應用程序:
一個。 右鍵單擊“ 圖像文件執行選項”文件夾,然后在快捷菜單上單擊“ 新建密鑰” 。
灣 右鍵單擊新密鑰,然后在快捷菜單上單擊“ 重命名” 。 C。 編輯應用程序名稱的密鑰名稱; myapp.exe ,在此示例中。- 右鍵單擊myapp.exe文件夾,然后在快捷菜單上單擊“ 新建字符串值” 。
- 右鍵單擊新字符串值,然后在快捷菜單上單擊“重命名”。
- 將名稱更改為調試器。
- 右鍵單擊新的字符串值,然后在快捷菜單上單擊“ 修改” 。 將出現“ 編輯字符串”對話框。
- 在“ 數值數據”框中,鍵入vsjitdebugger.exe 。
- 單擊確定 。
- 從注冊表菜單中,單擊退出 。
- 包含vsjitdebugger.exe的目錄必須位於系統路徑中。 要將其添加到系統路徑,請按照下列步驟操作:
一個。 在“經典”視圖中打開“ 控制面板” ,然后雙擊“ 系統” 。
灣 單擊高級系統設置 。
C。 在“ 系統屬性”中單擊“ 高級”選項卡。
d。 在“ 高級”選項卡上,單擊“ 環境變量” 。
即 在“ 環境變量”對話框的“ 系統變量”下 ,選擇“ 路徑” ,然后單擊“ 編輯”按鈕。
F。 在“ 編輯系統變量”對話框中,將目錄添加到“ 變量值”框中。 使用分號將其與列表中的其他條目分開。
G。 單擊“ 確定”關閉“ 編輯系統變量”對話框。
H。 單擊“ 確定”關閉“ 環境變量”對話框。 一世。 單擊“ 確定”關閉“ 系統屬性”對話框。- 現在,使用任何方法啟動您的應用程序。 Visual Studio將啟動並加載應用程序
另一個不錯的解決方案是使用Visual Studio擴展“ReAttach”。 可以在這里找到。
如果您的進程當前未運行,ReAttach將要求您啟動它並在可用時立即將其附加到該進程。
當我在驗收測試中啟動控制台應用程序時,我一直在尋找一些方法。
它是視覺工作室的附加組件,它可以作為一種享受。 當我調試驗收測試(我使用resharper測試運行器)並在啟動的應用程序中放置一個斷點時,我現在可以在同一個Visual Studio實例中調試應用程序。
“Entrian Attach”是一個Visual Studio加載項,它可以完成這一操作 - 您可以告訴它可執行文件的名稱,並且在任何代碼運行之前,它會在進程啟動時附加調試器,無論它是如何啟動的。
(披露:我是作者。我建立了Attach因為我一直有這個問題!)
怎么樣:在VS中打開a.exe
項目,設置斷點等。然后打開a.exe, 調試選項卡的項目屬性 ,並將命令設置為c.exe
。 然后點擊Debug 。
不幸的是,我從未在托管項目中做到這一點,所以我可以在這里脫穎而出。 但是,這就是我將如何處理非托管(C ++)項目。 我認為托管調試器也應該支持它。
您還可以使用Windows調試工具附帶的gflags.exe工具,您只需打開gflags.exe然后轉到圖像文件,輸入進程名稱(a.exe)按Tab鍵並檢查調試器復選框,在TextBox中使用選項/ debugexe進入vs路徑(即“C:\\ Program Files(x86)\\ Microsoft Visual Studio 10.0 \\ Common7 \\ IDE \\ devenv.exe”/ debugexe)
一旦進程運行,自動可視工作室將打開您可以添加斷點並按Run。
如果C#代碼由非托管代碼啟動,那么請確保檢查“非托管代碼調試”@Project屬性 - >調試選項..
我非常喜歡@RichieHindle建議的Entrian Attach,但我也發現了這個類似的免費工具。 它捕獲調試過程啟動的所有進程。
Spawned Process Catcher: https ://marketplace.visualstudio.com/items?itemName = Brubtsov.SpawnedProcessCatcher
從VS 2013 SP2開始,Microsoft提供了一個免費工具,它與之前提到的“Spawned Process Catcher”相同 - 附加所有進程,這些進程由已經在調試中的進程啟動。 注意:我只使用非托管C ++進行了測試(這完美無缺)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.