2

在 Visual Studio 的“附加到进程”对话框中,“可用进程”列表中的一列是“标题”,它列出了每个进程拥有的最顶层窗口的标题。

我们生成多个服务器进程的多个实例以划分工作。对于这些控制台进程,Title 字段是空白的,所以目前我们必须在我们的管理工具中查找进程 id 才能找到正确的进程。

为了简化调试过程,我希望能够使用 Title 字段来直接确定我想要的过程。

SetConsoleTitle 不能解决问题,SetWindowText 也不能​​使用 NULL hWnd。据我所知,控制台应用程序本质上并不拥有我们可以传递给 SetWindowText 的任何窗口句柄。我们不想为这些服务器进程创建任何可见的窗口。

有什么建议可以合理地诱使 Visual Studio 在此处显示一些有用的信息吗?

4

1 回答 1

1

我想你可能不走运。控制台窗口不属于控制台进程,而是属于系统进程(win7 上的 conhost.exe,可能是 vista,之前的 csrss.exe),所以如果 Visual Studio 只是在寻找一个进程顶级窗口,它将不会t 找到控制台窗口。据我所知,不支持从 proc 中探测控制台,因此 Visual Studio 可能没有明智的方法来查看您拥有的控制台窗口的标题。

一种可能的解决方案可能是在控制台进程中创建一个顶级窗口作为调试辅助。您可能希望有条件地编译它,因此它仅在您调试时可用。只需创建一个额外的线程来泵送消息,并创建一个顶级窗口。如果您设置正确的样式,窗口将是不可见的。您可能不想在代码中附带窗口,因为在长时间运行的服务器代码中,窗口总是会增加您的攻击面,即使只是一点点。

这可能不是很有帮助,但值得一提的是,在 Windows 上,分配工作的首选方式是使用线程而不是多个进程。进程是一个昂贵的对象,线程在系统资源方面要便宜得多,而且更容易调试。

于 2010-04-24T02:47:11.003 回答