我寫了一個程序,產生了一些進程。由另一個產生的調試進程
默認情況下,Visual Studio不會調試新進程 - 只有創建新進程的原始進程。
有沒有辦法在代碼中自動將Visual Studio連接到創建時的進程?
我寫了一個程序,產生了一些進程。由另一個產生的調試進程
默認情況下,Visual Studio不會調試新進程 - 只有創建新進程的原始進程。
有沒有辦法在代碼中自動將Visual Studio連接到創建時的進程?
爲此,您必須編寫VS加載項或VS包,因爲您需要坐在後臺並等待子進程加載。
這裏是你想做的事一般配方:
uint processID = DTE.Debugger.CurrentProcess.ProcessID
)ManagementEventWatcher
聽用於在this thread中描述的新工藝創建。你的查詢應該是"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
DTE.Debugger.LocalProcesses
,然後調用.Attach()
就可以了。來源:debugging a process spawned with CreateProcess in Visual Studio
您可暫時將在調用的DebugBreak()某處你的子進程的 啓動代碼。如果您想調試該進程,這將導致Windows提示 。
編輯: 由於這兩個項目都在同一個解決方案,爲多項目的調試配置VS: (VS2010) 語境單擊Solution Explorer
解決方案節點選擇Set Startup Projects...
在對話框選擇Multiple startup projects
單選按鈕
在項目網格中將所有希望調試的項目更改爲Action
Start
我不想臨時做點什麼;在我的父進程中,我想檢查它是否正在調試並自動附加調試器。 – 2012-03-13 16:39:14
那麼這個答案可以解決它從孩子方面..但'臨時'是關於你是否刪除代碼或完全取決於你。 – 2012-03-13 16:43:30
即使使用彈出窗口,它將成爲第二個調試器,而不是主調試器實例。 – 2012-03-13 16:53:39
這仍然提供了一個提示,但不附加調試:
if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();
,然後在父進程
if(Debugger.IsAttached)
SetDebuggerFlag()
你需要爲調試標誌的機制,如磁盤上的文件/ reg鍵/互斥等。
正在啓動的調試器將不會與初始實例相同。
既然你要求的VS選項,我只是要提到這是一個評論。 WinDbg + SOS允許您自動附加到子進程。 – 2012-03-13 16:50:04
第二個過程是同一個解決方案中的項目嗎? – 2012-03-13 16:55:52
@Boo是的,它是。 – 2012-03-13 20:19:25