簡體   English   中英

Visual Studio:在生成進程時自動附加到進程

[英]Visual Studio: auto attach to a process when the process is spawned

我想在生成的過程中附加到進程(a.exe),是否可以使用VS? 我只知道這個過程的名稱。 實際上我想要完成的是在c#代碼中設置一個斷點,但代碼屬於另一個可執行文件,它將由當前運行的應用程序(c.exe)啟動。 代碼在初始化期間,因此我無法手動執行連接。

當我以前遇到這種情況(並且我控制了兩個進程)時,我發現一個不錯的解決方法是在產生進程的入口點調用Debugger.Launch() 然后,VS將彈出一個對話框,讓您附加到該過程。

請參閱MSDN文章, 如何:自動啟動調試器 - 這將允許人們跳過過多的繁忙工作單擊確認對話框[不關閉UAC或其他混亂]。 本文列出了以下步驟:

  1. 啟動注冊表編輯器(regedit)。
  2. 在注冊表編輯器中,打開HKEY_LOCAL_MACHINE文件夾。
  3. 導航到HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows NT \\ currentversion \\ image文件執行選項。
  4. 在“ 映像文件執行選項”文件夾中,找到要調試的應用程序的名稱,例如myapp.exe 如果找不到要調試的應用程序:
    一個。 右鍵單擊“ 圖像文件執行選項”文件夾,然后在快捷菜單上單擊“ 新建密鑰”
    右鍵單擊新密鑰,然后在快捷菜單上單擊“ 重命名” C。 編輯應用程序名稱的密鑰名稱; myapp.exe ,在此示例中。
  5. 右鍵單擊myapp.exe文件夾,然后在快捷菜單上單擊“ 新建字符串值”
  6. 右鍵單擊新字符串值,然后在快捷菜單上單擊“重命名”。
  7. 將名稱更改為調試器。
  8. 右鍵單擊新的字符串值,然后在快捷菜單上單擊“ 修改” 將出現“ 編輯字符串”對話框。
  9. 在“ 數值數據”框中,鍵入vsjitdebugger.exe
  10. 單擊確定
  11. 注冊表菜單中,單擊退出
  12. 包含vsjitdebugger.exe的目錄必須位於系統路徑中。 要將其添加到系統路徑,請按照下列步驟操作:
    一個。 在“經典”視圖中打開“ 控制面板” ,然后雙擊“ 系統”
    單擊高級系統設置
    C。 在“ 系統屬性”中單擊“ 高級”選項卡。
    d。 在“ 高級”選項卡上,單擊“ 環境變量”
    在“ 環境變量”對話框的“ 系統變量”下 ,選擇“ 路徑” ,然后單擊“ 編輯”按鈕。
    F。 在“ 編輯系統變量”對話框中,將目錄添加到“ 變量值”框中。 使用分號將其與列表中的其他條目分開。
    G。 單擊“ 確定”關閉“ 編輯系統變量”對話框。
    H。 單擊“ 確定”關閉“ 環境變量”對話框。 一世。 單擊“ 確定”關閉“ 系統屬性”對話框。
  13. 現在,使用任何方法啟動您的應用程序。 Visual Studio將啟動並加載應用程序

另一個不錯的解決方案是使用Visual Studio擴展“ReAttach”。 可以在這里找到。

如果您的進程當前未運行,ReAttach將要求您啟動它並在可用時立即將其附加到該進程。

當我在驗收測試中啟動控制台應用程序時,我一直在尋找一些方法。

我今天發現了這個 - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/

它是視覺工作室的附加組件,它可以作為一種享受。 當我調試驗收測試(我使用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 ++進行了測試(這完美無缺)。

Microsoft子進程調試電動工具

MSDN博客條目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM