Visual Studio のデバッグに一般的な Console2 cmd.exe の代替品を使用する方法はありますか? つまり、VS でコンソール アプリをデバッグするときは、cmd.exe の代わりに Console2 を使用する必要があります。
2 に答える
興味深い質問です。私はそれを調べました、いくつかのオプションがありますが、どれもきれいではありません。
Console.exeは引数を取るので、特定のタブで起動して任意の処理を実行することが可能です。ただし、このプロセスは常に独自の cmd.exe 内で実行されます。たとえば、プログラムが c:\my.exe で、console.exe -t tabname -r c:\myexe
Console2 の内部呼び出しとして Console を起動するとCreateProcess( ... cmd.exe c:\my.exe ... )
、my.exe の出力も表示されません。ただし、これは簡単に解決できます。次console.exe -t tabname -r "/k c:\myexe"
のように起動します。 /k スイッチを使用すると、cmd.exe がアクティブなままになり、プログラムの標準出力が表示されます。(ソースを調べましたが、現在実行中のコンソール インスタンスにタブを「アタッチ」する方法が見つからなかったので、引数を指定して起動すると常に新しいインスタンスが作成されます。これが探しているものかどうかわかりませんか?
上記を反映するように、プロジェクトのデバッグ プロパティを簡単に変更できます。
Command: /path/to/console.exe
Command Arguments: -t tabname -r "/k $(TargetPath)"
VS 内から exe を起動すると、コンソール セッション内で exe が起動されます。ただし、VS は my.exe ではなく console.exe をデバッグしようとするため、デバッグは機能しません。これは、別のプロセスであるためです。exeDebugBreak();
の main() の最初の行に as を入れると、exe をデバッグするオプションが表示されるので、これを解決できます。全体として、これはあなたが望むものを達成するには少し面倒かもしれませんが、別の方法はないと思います: コンソールは常に新しいプロセスを生成するので、デバッグする唯一の方法はデバッガーを接続することですそのプロセスが開始された後。
Scott Hanselmanがこれについてブログを書いています。
彼は、 Console Settings > tabs > Main > Shellにこの値を使用することを提案しています:
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86
残念ながら、これはvcvarsall.batファイルがない Visual Studio Express 2010 では機能しないようです。