39

コンソールアプリケーションをデバッグするときに非標準コンソールを使用するようにVisual Studioを設定することはできますか?Visual Studio Consoleアプリケーションのデバッグにカスタムコンソールを使用する

デフォルトのコンソールの内容はわかりません。cmd.exeのようになります。デバッグ時に私のコンソールアプリケーションがConEmuで動作するのが大好きです。

私は "Start Debugging"をクリックしたいと思いますが、プロセスはいつものように起こりますが、cmd.exeコンソールを起動するのではなく、ConEmuコンソールを起動する必要があります。 Use Console2 for Visual Studio debugging?

+1

スーパーユーザに同様のQ http://superuser.com/q/445394/139371作業罰金以下の回答で与えられた – Maximus

+0

方法は、しかし、私は、Visual Studioは、内蔵した第三者コンソールを選択するためのサポートを望みますすべてのコンソールアプリケーション出力を表示するエミュレータ。 (私はここで私の用語を得ているのかまだ分かりません@Maximus!:-)) –

+0

ええ、ConEmu ... – Anubis

答えて

34

あなたが用語をミックスしました:

私は、2010年密接にこの(未回答)の質問に関連したプロ

のVisual Studioを使用しています。 "Windowsコンソール"は "cmd.exe"ではなく、 "conhost.exe"を使用してWin7などを実装した特別な "サービス"です。

コンソールアプリケーション(cmd、powershell、または自分のアプリケーションではありません)を起動すると、コンソールウィンドウが表示される特別な環境でウィンドウが起動します。しかし、それは常に内部のWindowsコンソールです。

しかし!コンソールエミュレータはこのウィンドウをつかんで、実際のコンソールを隠し、エミュレートされたサーフェスを表示することがあります。 たとえば、特別なスイッチ(SUで説明されています、コメント内のリンク)とその完了でConEmuを開始することができます。

デフォルトの端末交換

ConEmuはDefault Terminalという名前の機能があります。この機能を有効にすると、ConEmu端末のVisual Studioからアプリケーションをシームレスに起動できます。考え方は、ソースアプリケーション(explorer.exevcexpress.exeなど)にCreateProcessをフックして、設定で|で区切ります。その機能の詳細についてはproject wikiをご覧ください。

既存のConEmuインスタンスを使用するか、アプリケーションの新しいウィンドウを実行するかを選択できます。また、ConEmuは、アプリケーション終了後にPress Enter or Esc to close console...メッセージをコンソールに表示することができます(Alwaysラジオ)。プログラムの最後にreadlineを追加する必要はなく、出力を確認することができます。アプリケーションコード

を変更

ConEmu DefTerm settings page

それはあなた自身のプログラムですので、あなたのmain機能

C++の例の頭にライン以下、例えば、追加することが

#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#の例

#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 
+0

ありがとう。 ConEmuの「Attach To」オプションは、投稿にコメントしたSuperUserの記事のリンクに記載されているように、うまくいきます。私はC#で作業しているので、ここで提供するプリプロセッサディレクティブを試すことができませんでした。現在、C#プリプロセッサ用に用意したディレクティブの実装方法はわかりません。優れたアプリケーションをありがとう! –

+0

C#のコード例... – Maximus

+0

ありがとう@Maximus。このシナリオでAUTOATTACHスイッチの予想される動作は何ですか? –

3

いくつかのアイデア:

  1. は、単に直接ConEmuであなたのプログラムを起動して、Visual Studioの[デバッグ]メニューから、プロセスにアタッチを選択します。プログラムの先頭に遅延を追加して、添付する時間を与えることができます。これは何度も何度もやらなければならない場合には痛みですが、この種の状況にはしばしば役に立ちます。

  2. __debugbreak();ステートメントをプログラムの先頭に(おそらく#ifndef NDEBUGブロック内に)追加します。 ConEmuからプログラムを直接起動してください。 Visual StudioのJIT機能を使用して、デバッグブレークヒット時に接続し、そこからデバッグを続行します。

関連する問題