2010-04-24 96 views
2

在Visual Studio的「附加到進程」對話框中,「可用進程」列表中的一列是「標題」,它列出了每個進程擁有的最頂層窗口的標題。控制檯應用程序的窗口標題

我們產生多個服務器進程的多個實例以劃分工作。對於這些控制檯進程,標題字段爲空,所以目前我們必須在我們的管理工具中查找進程ID以便找到正確的進程。

爲了簡化調試過程,我希望能夠使用標題字段來直接確定我想要的過程。

SetConsoleTitle不會執行該操作,也不會使用帶有空hWnd的SetWindowText。據我所知,控制檯應用程序本身並不擁有任何我們可以傳遞給SetWindowText的窗口句柄。我們不想爲這些服務器進程創建任何可見的窗口。

對於合理的方法來欺騙Visual Studio在這裏顯示一些有用的信息的任何建議嗎?

回答

1

我想你可能會走運。控制檯窗口不屬於控制檯進程,而是屬於系統進程(win7上的conhost.exe,也可能是vista,之前的csrss.exe),所以如果Visual Studio只是在尋找進程頂級窗口,找到控制檯窗口。根據我的瞭解,不支持proc控制檯,因此visual studio可能沒有明智的方法來查看控制檯窗口的標題。

一個可能的解決方案可能是在控制檯進程中創建頂層窗口作爲調試幫助。你可能想有條件地編譯它,所以它只在你正在調試時纔可用。只需創建一個額外的線程來抽取消息,並創建一個頂級窗口。如果您設置了正確的樣式,該窗口將不可見。你可能不想在代碼中使用窗口,因爲在長時間運行的服務器代碼中,即使只有一點點,窗口總是會增加攻擊面。

這可能不是很有幫助,但值得一提的是,在Windows上,分配工作的首選方法是使用線程而不是多個進程。一個進程是一個昂貴的對象,線程在系統資源方面要便宜得多,而且更容易調試。

+0

感謝您的建議!我在想一個看不見的窗口,但我在控制檯程序中使用windows的工作到目前爲止主要集中在「在服務器上彈出這個對話框是壞的」。關於分配工作:取決於上下文。進程比線程更好地擴展到多臺物理機器。進程最大限度地減少客戶端對服務器崩潰錯誤的影響;生產中的問題明顯少於推出前的問題。我可以調試一個進程,而其朋友繼續他們的快樂方式;我不知道有什麼方法可以調試一個線程,而不會掛起進程中的所有其他線程。 – Timbo 2010-04-26 21:28:31

相關問題