2010-04-24 6 views
2

Dans la boîte de dialogue Attacher au processus de Visual Studio, l'une des colonnes de la liste des processus disponibles est "Titre", qui répertorie le titre de la fenêtre la plus haute appartenant à chaque processus.Titre de la fenêtre pour une application console

Nous générons plusieurs instances de plusieurs processus serveur afin de compartimenter le travail. Pour ces processus de console, le champ Titre est vide, donc nous devons actuellement rechercher l'identifiant de processus dans notre outil de gestion afin de trouver le processus correct.

Afin de rationaliser le processus de débogage, j'aimerais pouvoir utiliser le champ Titre pour déterminer directement le processus que je veux.

SetConsoleTitle ne fait pas l'affaire, ni SetWindowText avec un hWnd NULL. Au meilleur de ma connaissance, une application de console ne possède intrinsèquement aucune poignée de fenêtre que nous pourrions transmettre à SetWindowText. Nous ne voulons pas créer de fenêtres visibles pour ces processus serveur.

Des suggestions pour un moyen raisonnable d'amener Visual Studio à afficher des informations utiles ici?

Répondre

1

Je pense que vous pourriez ne pas avoir de chance. La fenêtre de la console n'appartient pas au processus de la console, mais appartient à un processus système (conhost.exe sur win7 et peut-être vista, csrss.exe avant cela), donc si Visual Studio cherche simplement un processus de haut niveau, il gagne ' t trouve la fenêtre de la console. La détection des consoles en mode proc n'est pas supportée autant que je sache, donc il n'y a probablement aucun moyen sensé pour Visual Studio de voir le titre des fenêtres de console que vous avez.

Une solution possible pourrait être de créer une fenêtre de niveau supérieur dans votre processus de console comme aide au débogage. Vous voudrez peut-être le compiler de manière conditionnelle, il n'est donc disponible que lorsque vous déboguez. Créez simplement un thread supplémentaire qui envoie des messages et crée une fenêtre de niveau supérieur. Si vous définissez les bons styles, la fenêtre sera invisible. Vous ne voudrez peut-être pas expédier avec la fenêtre dans le code parce que dans le code du serveur à long terme, les fenêtres augmentent toujours votre surface d'attaque, même si seulement un peu.

Ceci n'est probablement pas très utile, mais il est important de mentionner que sur Windows, la méthode préférée pour répartir le travail consisterait à utiliser des threads plutôt que des processus multiples. Un processus est un objet coûteux, et les threads sont beaucoup moins chers en termes de ressources système et plus faciles à déboguer.

+0

Merci pour le conseil! Je pensais à une fenêtre invisible, mais mon travail avec Windows dans les programmes de la console a jusqu'ici essentiellement porté sur "avoir cette boîte de dialogue sur le serveur est BAD". Sur la répartition du travail: dépend du contexte. Les processus évoluent vers plusieurs machines physiques mieux que les threads. Les processus minimisent l'impact côté client des bogues de panne de serveur; évidemment moins d'un problème dans la production que c'était avant le lancement. Je peux déboguer un processus pendant que ses amis continuent leur chemin joyeux; Je ne suis pas au courant d'un moyen de déboguer un thread sans également suspendre tous les autres threads dans le processus. – Timbo

Questions connexes