2008-10-24 252 views
1

我目前正在開發一個由五個單獨的可執行文件組成的應用程序,它們通過ActiveMQ進行通信。我有一個包含五個可執行項目的Visual Studio解決方案。其中一個項目(launcher.exe)從其本地文件夾啓動其他四個項目作爲單獨的進程。因此,啓動項目被設置爲「啓動項目」,因此,由於我對VS2005的瞭解有限,因此它是唯一可以設置中斷點和調試的人。在Visual Studio 2005中調試多項目(C++)解決方案

有沒有一種方法可以在我的單個VS解決方案中的5個C++項目中設置多個斷點,並在同一時間調試它們,如果啓動項目是從VS執行的唯一項目?

注:手動啓動通過Visual Studio中的每個項目的新實例,是不是一種選擇,因爲其執行需要由LAUNCHER.EXE同步。

我很抱歉,如果這是錯綜複雜的,這是我能解釋的最好的。在此先感謝您的幫助!

回答

5

您需要的是在工具菜單中:附加到過程。這給你一個正在運行的進程列表,並允許你將調試器附加到這些進程。

對於本地調試,Transport和Qualifier應保持其默認值。附加到列表上方的附加值決定了你將進行哪種類型的調試(本機或管理是最常見的類型),通常調試器也可以在這裏找到一個很好的默認值。

主要令人感興趣的部分是進程列表 - 請在此列表中查找要調試的子進程。一旦找到並選擇了進程,請單擊右下角的附加(或者只需雙擊進程),調試器將附加到該進程並開始調試。

您可能還需要啓用「調試位置」工具欄,該工具欄提供了一種將調試器的焦點更改爲您所連接的各種進程和線程的方法。一個Visual Studio實例中的多進程調試可能會非常棘手,因此您始終可以考慮啓動單獨的實例來調試每個不同的進程。

另一個棘手的方面可能是調試子流程的初始啓動。通常,在調試器連接之前,您想調試的東西就會發生,所以您需要某種方法來讓進程等待您做好準備。在C++中執行此操作的簡單方法是使用IsDebuggerPresent函數。嘗試將此代碼添加到您的main()函數的開始(或同等學歷):

while(!IsDebuggerPresent()) 
    Sleep(500); 

或者嘗試此代碼爲C#:

while(!System.Diagnostics.Debugger.IsAttached) 
    System.Threading.Thread.Sleep(500); 
+0

一個完美的答案!謝謝。 – BeachRunnerFred 2008-10-24 01:37:58

1

您可以通過運行啓動一次挑一手動(在Visual Studio之外,或者用< ctrl-f5 >),然後附加到要調試的進程,一旦它啓動。如果它是解決方案中的其中一個項目,那麼您可以設置斷點,並在連接調試器時將它們拾取。

相關問題