14

回答のまとめ

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

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

Visual Studio の Pro またはそれ以上のバージョンを使用している場合は、さらに [デバッグ] > [例外...]、[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 (簡単にテストできる唯一のエディション) の両方で試しましたが、すべて実行されています。これは、それがエクスプレスの動作であるか、オン/オフを切り替える設定がどこかにあると私に信じさせました。

  1. バージョン/エディションでこれをオン/オフする設定はありますか?
  2. この設定は VS2008、VS2010、またはその両方に存在しますか?
  3. 設定は Express エディションで公開されていますか?
  4. VS2008 Pro のインスタンスは一意ですか? 引き継がれた古いバージョンの Visual Studio で公開された設定です (私は多くの新しいバージョンで VS の設定を引き継いでいます)。
4

5 に答える 5

12

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

于 2012-01-18T06:16:02.917 に答える
4

VS2010デバッガー/.NET4には、管理されたデバッグのみのコンソールアプリケーションでCtrl + Cを押すと、奇妙な「記号なし」ウィンドウが表示されるというバグがあるようです。ミックスモードのデバッグを有効にするための回避策があります。バグには「修正済み」と記載されていますが、他の人がこれにぶつかっている場合は、接続のバグについて報告して、修正プログラム/SPに修正が適用されるようにしてください。

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

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

関連リンク:TopShelf、(MassTransitから取得)

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

于 2010-12-16T15:58:39.523 に答える
4

答えが見つかりました。これはデバッグ例外オプションです。最初はどうやって見逃したのかわかりませんが、ここにあります:

デバッグ -> 例外... Win32 例外 - Control-C

これはVS2008 Proにあります。

オプションが Express エディションに存在しないことも確認できます(Win32 Exceptions ノード全体がありません)。

VS2010 Pro を所有していないので (まだ?)、残っている唯一の質問は、Win32 Exceptions ノードと Control-C 例外が VS2010 Pro エディションに存在するかどうかです。

于 2010-10-16T22:45:40.997 に答える
1

TopShelf はこの問題を報告しています:

https://github.com/Topshelf/Topshelf/issues/10

Microsoft は次のように認めています。

https://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0

于 2013-05-19T17:10:57.117 に答える
0

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

あなたは、VS Pro にはこの動作がないと言っていました。私はそれ自体が SetConsoleMode を設定しているだけであると仮定していますが、VS Express はそうではありません。ただし、コンソールに CTRL-C を無視し、SetConsoleMode を使用して直接入力として扱うように指示することもできます。詳細については、次のリンクを参照してください。

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

プログラムの最初に、選択したモード オプションを指定して呼び出しを配置するだけで、準備完了です。

お役に立てれば!

M

于 2010-10-16T17:35:08.867 に答える