12


2

コンソールアプリでCtrl + CをトラップするVS2010(Express)デバッガー

_ _ 回答のまとめ

デバッガーがCtrl + Cをトラップしないようにするには、まずVisual Studioホスティングプロセスをオフにします(プロジェクトプロパティの[デバッグ]タブにあります)

ExpressバージョンのVisual Studioを使用している場合は、それがすべて可能です。

Proまたはそれ以上のバージョンのVisual Studioを使用している場合は、[デバッグ]> [例外…​]、[Win32例外]を追加で開き、Ctrl + Cのチェックを外すことができます。

別の方法として、デバッグ時にCtrl + Breakを使用できます。ただし、私のようにCtrl + Cが脳に組み込まれている場合を除きます。 _ _

元の

以下が編集されました。 ハンスは答えを撤回したようですが、彼の質問は問題の記述を絞り込むのに役立ちました。

余分な明快さ

  • Ctrl + Cの動作を変更したくありません。

  • 私は回避策を探していません。

  • Ctrl + Cが押されたときに、デバッガーが中断しないようにするだけです。 デバッグセッション中。

次の例が工夫されていることに注意してください。 動作を実証するだけです。 ReadKeyの行を変更しました。

次のプログラムをデバッグ(実行)します。

class Program
{
    static void Main()
    {
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }
}

Ctrl + Cを押します。 デバッガーは、スリープ行にブレークポイントを設定したかのようにブレークします。

これをどのようにオフにしますか? Ctrl + Cの場合、デバッガーがまったく壊れないようにします。

これは、VS2008 Proでは自宅では発生しません。

VS2008 ExpressとVS2010 Express(簡単にテストできる唯一のエディション)の両方で試してみましたが、それらはすべてそれを行います。 これにより、それがExpressの動作であるか、オン/オフを切り替える設定がどこかにあると信じるようになりました。

  1. どのバージョン/エディションでもこれをオン/オフにする設定はありますか?

  2. この設定はVS2008、VS2010、またはその両方に存在しますか?

  3. Expressエディションで設定が公開されていますか?

  4. VS2008 Proのインスタンスは一意ですか? 設定は何かでしたか 引き継がれた古いバージョンのVisual Studioで公開されました(多くの新しいバージョンでVS設定を引き継ぎました)

5 Answer


11


おそらくこれは今では一般的な知識ですが、Visual Studioでデバッグ中にctrl-cを使用してトップシェルフアプリケーションを停止しようとすると、同じ問題が発生していました。 最後に、スローされたときにcontrol-c win32例外のキャプチャをオフにし(Debug→ Exceptions、またはctrl d、e Win32 Exceptionsを開き、スローされた列のcontrol-cのチェックを外す)、プロジェクトに移動する必要があると考えました(サービスを実行している)プロパティと[デバッグ]タブで、アンマネージコードのデバッグを有効にするオプションをオンにします。 MS Visual Studio 2010 proバージョン10.0.40219.1 SP1Relを使用しています。


4


私は答えを見つけました、それはデバッグの例外オプションです。 初めて見逃した方法はわかりませんが、ここにあります:

デバッグ→例外…​ Win32例外-Control-C

これはVS2008 Proにあります。

また、オプションがExpressエディションに*存在しない*ことを確認できます(Win32例外ノード全体が欠落しています)。

VS2010 Proを所有していない(まだ?)ため、私が残した唯一の質問は次のとおりです。Win32ExceptionsノードとControl-C例外はVS2010 Proエディションに存在しますか?


4


https://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0があるようです?wa = wsignin1.0 [VS 2010デバッガー/ .NET 4のバグ]マネージデバッグのみのコンソールアプリケーションでCtrl + Cを押すと、奇妙な「シンボルなし」ウィンドウが表示される。 ミックスモードデバッグを有効にする回避策があります。 バグは「修正済み」と表示されますが、他の人がこれをヒットしている場合は、接続バグについて報告してください。修正が修正プログラム/ SPに反映されます。

TopShelfライブラリを使用してWindowsサービスをホストするサービスをデバッグしているときに、これを確認しました。これにより、サービスをローカルでコンソールアプリケーションとしてデバッグすることもできます。

関連リンク:http://topshelf-project.com/documentation/getting-started/[TopShelf]、(MassTransitからアクセス)

更新:接続バグはVS 2010ベータ版のようですが、VS 2010 RTMを使用したマネージドオンリーデバッグでは、最新の修正プログラムであると思われる奇妙な「ソースがありません」が表示されます。


0


CTRL-Cは、「ブレーク」操作のためにコンソールウィンドウ自体に直接接続されています。 新しいコンソールアプリを開き、pingを実行して、すぐにCTRL-Cを押します。 pingを中止します。

VS Proにはこの動作がなかったとおっしゃいました。 VS Expressは設定しないのに対して、それ自体がSetConsoleModeを設定しているだけだと思います。 ただし、CTRL-Cを無視してSetConsoleModeを使用して直接入力として扱うようにコンソールに直接指示することもできます。 詳細はこちらのリンクをご覧ください。

C#の使用例を次に示します。

プログラムの最初に、選択したモードオプションで電話をかけるだけで準備完了です。

お役に立てれば!

M