2009-12-23 106 views
49

一旦產生它,我想要附加到進程(a.exe),是否可以使用VS?我只知道過程的名稱。其實我想完成的是在c#代碼中設置一個斷點,但代碼屬於另一個可執行文件,它將由當前正在運行的應用程序(c.exe)啓動。代碼在初始化期間內,因此我無法手動執行附加操作。Visual Studio:產生進程時自動附加到進程

+0

你能給我們更多的環境?你擁有這個過程 - 是你的代碼嗎?這個過程是否會調用您的代碼? – 2009-12-23 07:17:41

+0

是的,我擁有所有的過程。 – 2009-12-23 07:39:03

回答

52

當我以前遇到過這種情況(並且我控制了兩個進程)時,我發現一個體面的解決方法是在產卵過程的入口點調用Debugger.Launch()。然後VS會彈出一個對話框,讓你重視這個過程。

+4

只適用於.NET語言。不適用於C++,例如 – guilhermecgs 2015-04-16 20:52:53

3

如何:在VS開放項目a.exe,設置斷點等,然後打開項目屬性爲A.EXE,調試選項卡,並設置命令c.exe。然後打到調試

不幸的是,我從來沒有這樣做託管項目,所以我可以在這裏的標記。然而,這就是我如何處理非託管(C++)項目。我認爲託管調試器也應該支持它。

+0

在我的情況下,我想調試的可執行文件作爲另一個可執行文件啓動的一部分啓動。我想這是問題背後的推動力。 – 2013-12-12 23:41:55

+0

爲我工作。對於直接案例來說,快速且容易,但對於更復雜的案例可能不太好。 – AbstractDissonance 2016-01-10 08:43:26

0

如果C#代碼是由非託管代碼推出接着請務必檢查「非託管代碼調試」 @project屬性 - >調試選項..

23

MSDN有【如何:啓動調試器自動] [1] - 這將允許跳過繁忙的工作,點擊確認對話框[不關閉UAC或其他消息]。文章列出了以下步驟:

  1. 啓動註冊表編輯器(regedit)。
  2. 在註冊表編輯器中,打開HKEY_LOCAL_MACHINE文件夾。
  3. 導航到HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image文件執行選項。
  4. 圖像文件執行選項文件夾中,找到要調試的應用程序的名稱,如myapp.exe。如果您不能 找到您要調試的應用程序:
    a。用鼠標右鍵單擊圖像文件執行選項文件夾,然後在快捷菜單上單擊新密鑰。 b。用鼠標右鍵單擊新的密鑰,然後在快捷菜單上,單擊重命名。 c。將密鑰名稱編輯爲應用程序的名稱; myapp.exe,在這個例子中。
  5. 右鍵單擊MyApp.exe的文件夾,在彈出的快捷菜單上,單擊新的字符串值
  6. 用鼠標右鍵單擊新的字符串值,然後在快捷菜單上單擊重命名。
  7. 將名稱更改爲調試器。
  8. 用鼠標右鍵單擊新的字符串值,然後在快捷菜單上單擊修改。出現編輯字符串對話框。
  9. 數值數據框中,輸入vsjitdebugger.exe
  10. Click OK
  11. 註冊表菜單中,單擊退出
  12. 包含vsjitdebugger.exe的目錄必須位於系統路徑中。要將其添加到系統路徑,請按照下列步驟操作:
    a。在經典視圖中打開控制面板,然後雙擊系統。 b。點擊高級系統設置
    c。在系統屬性中,單擊高級選項卡。 d。在高級選項卡上,單擊環境變量。 e。在環境變量對話框,在系統變量,選擇路徑,然後單擊編輯按鈕。 f。在編輯系統變量對話框中,將目錄添加到變量值框中。使用分號將其與 列表中的其他條目分開。 g。點擊確定關閉編輯系統變量對話框。 h。
    h。點擊確定關閉環境變量對話框。 i。點擊確定關閉系統屬性對話框。
  13. 現在,使用任何方法來啓動您的應用程序。 Visual Studio將啓動和加載應用程序

    [1]:UTIL Windows自帶的調試工具http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx

+2

我喜歡這個答案,因爲如果你的代碼是建立在發佈模式下,PDB就可以工作。如果內置發佈模式,上述Debugger.Launch()方法不起作用。 – Pretzel 2013-04-04 17:14:54

3

您還可以使用gflags.exe,所有你需要做的就是打開GFLAGS。 exe然後去圖像文件輸入進程名稱(a.exe)按Tab鍵並檢查調試器複選框,在文本框中輸入帶有/ debugexe選項的vs路徑(即「C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe「/ debugexe)

自動visual studio會打開onc e進程正在運行,您可以添加斷點並按運行。

3

"Entrian Attach"是一個Visual Studio插件,它完全實現了這一點 - 您可以告訴它可執行文件的名稱,並且在進程啓動時將它附加到調試器上,不管它是如何在任何代碼運行之前啓動的。

(披露:我是作者,我建立了Attach,因爲我一直有這個問題!)

+0

沒有爲我工作...我可以看到符號加載,但然後該過程將繼續運行並退出。也許是因爲我試圖附加一個我沒有的解決方案,因此沒有任何斷點。 – 2014-07-10 18:17:51

+0

@NelsonRothermel:我想幫忙,但Stack Overflow不是Entrian Solutions技術支持的地方。 :-)如果你想讓我幫你解決問題,請給我發電子郵件([email protected]) - 有一些簡單的事情可以嘗試。 – RichieHindle 2014-07-10 20:29:53

+1

我最終得到了它與gflags.exe一起工作,而我的關鍵是打破了某種異常類型,所以我認爲如果我將它正確設置,您的解決方案實際上會工作。我現在不需要它,但它是一個有趣的插件,我可能將來會使用它。 – 2014-07-11 21:59:10

5

我一直在尋找一些方法來做到這一點,當我在驗收測試中啓動控制檯應用程序。 https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/

這是一個附加到Visual Studio,以及它的工作原理治療 -

我今天這個發現。當我調試驗收測試(我使用resharper測試運行器)並在啓動的應用程序中放置一個斷點時,我現在可以在同一個Visual Studio實例中調試該應用程序。

+0

這是我在這裏試過的所有解決方案中最簡單的。輕鬆安裝,即可使用。無需更改代碼。 – 2017-10-24 20:09:50

6

另一個不錯的解決方案是使用Visual Studio擴展「ReAttach」。可以發現here

如果您的進程當前沒有運行,則ReAttach會要求您啓動它並在其可用時立即附加。

相關問題