これは、外部アプリケーションのデバッグにVisualStudio2010を使用した経験のあるプログラマーへの質問です。
現在、私は働いている人々によって作られたプログラムのアドオンを開発しています。このアドオンを外部プログラムで動作させるには、外部プログラムで指定された特定のフォルダーに.dllファイルを配置する必要があります。ビルド設定を構成して、.dllファイルが自動的にコピーされるようにしました。また、.pdbファイルをコピーして、デバッグオプションを有効にします。
このアドオンはクラスライブラリにすぎないため、通常のようにデバッグすることはできません。また、外部アプリケーションのソースコードもありません。このクラスライブラリを適切にデバッグするにはどうすればよいですか?
これは私が試したものです:
1.プロセスへのアタッチ実行中のプロセスへのアタッチを
参照してください。セットアップに数秒かかることを除けば、これは問題なく機能しているようです。ほとんどの例外/ブレークポイントは外部プログラムの開始の最初の数秒で発生するため、これは問題です。また、このクラスライブラリを頻繁にデバッグし、しばらくすると時間がかかるため、VisualStudioをプロセスに手動でアタッチするのも面倒になります。
2. Debugger.Launch()
現在、私はDebugger.Launch()を使用してVisualStudioを外部プログラムに接続しています。これにより、Just In Timeプロンプトが表示され、使用するVisualStudioのインスタンスを尋ねられます。これは「プロセスにアタッチ」よりもはるかに遅いと思いますが、このようにして、ブレークポイントが発生する前にデバッガーがアタッチされていることを確認します。#if DEBUG
これをとの間に配置し#end if
て、リリースビルドを作成するときにこのポップアップが表示されないようにします。これも役立ちます。
3.既存のプロジェクトとして追加
プログラムの実行可能ファイルをプロジェクトとしてソリューションに追加しました。これを行うことで、この実行可能ファイルをスタートアッププロジェクトとして設定でき、F5キーを押すと起動します。これの最大の利点は、実行可能ファイルが開始されるとすぐにデバッグできることです。「 VisualStudioソリューションの一部ではない実行可能ファイルのデバッグ」を参照してください。これにより、Visual Studioは例外でブレークしますが、残念ながら、ブレークポイントをロードしていないようです。ブレークポイントを使用しようとすると、次の情報が
表示されます。モジュールウィンドウに「バイナリはデバッグ情報でビルドされていません。」と表示されます。これは解決できますか?
4.アクションの開始
SilentDocは、[プロパティ]->[デバッグ]->[アクションの開始]を使用して、外部プログラムを開始アクションとして設定することもできることに注意しました。参照:アプリケーションデバッグの開始アクションの変更この方法でブレークポイントを正しくロードするように見えます。ただし、何らかの理由で、これにより、最初に発生したブレークポイント/例外で外部プログラムが5分間フリーズします。凍結が完了すると、期待どおりに機能するように見えます。このフリーズの原因は何ですか?
編集:フリーズは外部プログラムによって引き起こされました。受け入れられた回答のコメントを参照してください。
5.イメージファイル実行オプションhmemcpyが提案したように、デバッガーを自動的
に起動する
ために「イメージファイル実行オプション」を使用することもできます。これは、同じJust In Timeプロンプトを表示するため、Debugger.Launch()と同じように見えます。ただし、このジャストインタイムの「デバッガー」はまったくデバッグしません。ブレークポイントと例外は無視されます。また、リリースビルドで作業している場合、JustInTimeプロンプトを単純に無効にすることはできません。
まとめ
オプション1は、ブレークポイントをロードし、ブレークポイント/例外でブレークしますが、時間がかかりすぎます。
オプション2はブレークポイントをロードし、ブレークポイント/例外でブレークしますが、遅すぎます。
オプション3はブレークポイントをロードせず、ブレークポイント/例外でブレークしません。
オプション4はブレークポイントをロードしますが、最初のブレークポイント/例外で5分間フリーズします。
オプション5はブレークポイントをロードせず、ブレークポイント/例外でブレークしません。
追加情報
外部プログラムとクラスライブラリはどちらもVB.NETで記述されており、私はVisual Studio 2010 Ultimateを使用しており、ターゲットフレームワークは.NETFramework4.0です。
オプション1と2は私には有効ですが、しばらくすると、これらのダイアログとプロンプトがすべて煩わしくなり、速度が低下します。オプション3と4の方が私には適しているように思われるので、誰かがそれらを機能させる方法を教えてくれれば、それは素晴らしいことです。オプション5もそれほど面白くないようです。私は、regedit.exeを常に使用したくありません。他に選択肢があれば教えてください。