Utiliser la console personnalisée pour le débogage D'Application Visual Studio

est-il possible de configurer Visual Studio pour utiliser une console non standard lors du débogage d'une application Console?

Je ne sais pas ce qu'est la console par défaut, elle ressemble à cmd.exe . J'aimerais vraiment que mon application Console fonctionne en ConEmu quand je débugge.

pour être clair, je veux cliquer sur "Démarrer le débogage" et le processus devrait se passer exactement comme d'habitude, mais au lieu d'apporter une console cmd.exe , il devrait apporter un ConEmu console (ou autre).

j'utilise Visual Studio 2010 Pro

étroitement lié à cette question (sans réponse): utiliser Console2 pour le débogage Visual Studio?

40
demandé sur Community 2012-09-26 17:04:53

2 réponses

vous avez confondu les Termes. La "Console Windows" n'est pas un "cmd.exe", mais Spécial " service "qui a mis en œuvre, par exemple de Win7, avec" conhost.EXE."

Lorsque vous démarrez tout application console (n'a pas d'importance cmd, powershell, ou votre propre application) le démarrage de windows dans un environnement particulier, qui peut avoir visible de la fenêtre de console. Mais il est toujours Windows console interne.

mais! Les émulateurs de la Console peuvent le saisir. fenêtre, cacher la console réelle et afficher leur propre surface émulée. Par exemple, vous pouvez démarrer ConEmu avec des commutateurs spéciaux (décrit sur SU, lien dans le commentaire) et son fait.

terminal par Défaut de remplacement

ConEmu a une caractéristique appelée Default Terminal . Si vous activez cette fonctionnalité, vous obtiendrez un démarrage sans faille de votre application à partir de Visual Studio dans le terminal ConEmu. L'idée est d'accrocher CreateProcess à la source application ( explorer.exe , vcexpress.exe et ainsi de suite, les délimiter avec | dans les paramètres). En savoir plus sur cette fonctionnalité dans le projet wiki .

vous pouvez choisir d'utiliser une instance ConEmu existante ou d'exécuter une nouvelle fenêtre pour votre application. Et ConEmu peut afficher le message Press Enter or Esc to close console... sur la console après la sortie de votre application (la radio Always ). Plus besoin d'ajouter readline à la fin de votre programme pour voir la sortie.

ConEmu DefTerm settings page

changer votre code d'application

Parce que c'est votre propre programme, vous pouvez ajouter, par exemple, les lignes suivantes à la tête de votre main fonction

C++ exemple

#ifdef _DEBUG
if (IsDebuggerPresent())
{
  STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi = {};
  if (CreateProcess(NULL,
        _T("\"C:\Program Files\ConEmu\ConEmu\ConEmuC.exe\" /AUTOATTACH"),
        NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
  { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); }
}
#endif

C# exemple

#if DEBUG
ProcessStartInfo pi = new ProcessStartInfo(@"C:\Program Files\ConEmu\ConEmu\ConEmuC.exe", "/AUTOATTACH");
pi.CreateNoWindow = false;
pi.UseShellExecute = false;
Console.WriteLine("Press Enter after attach succeeded");
Process.Start(pi);
Console.ReadLine();
#endif
35
répondu Maximus 2016-08-25 07:59:40

Quelques idées:

  1. il suffit de démarrer votre programme directement dans ConEmu, puis de choisir Attach to Process à partir du menu Debug dans Visual Studio. Vous pouvez ajouter un retard dans le début de votre programme pour vous donner le temps d'attacher. C'est une sorte de douleur si vous avez à faire cela, mais il est souvent utile pour ce type de situation.

  2. Ajouter un __debugbreak(); au début de votre programme (peut-être dans un bloc #ifndef NDEBUG ). Démarrez votre programme directement depuis ConEmu. Utilisez la fonction JIT de Visual Studio pour vous connecter lorsque le déboguage se produit, et continuez à déboguer à partir de là.

3
répondu Adrian McCarthy 2012-09-26 16:27:18