2010-04-24 53 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

相关问题