スタートアップイベントをデバッグする必要があるいくつかの理由(Excel 2010テンプレートプロジェクトから作成されたExcelファイル)でVisual Studioから実行できない.NETプログラムがあります。
プログラムの初期化後に発生するイベントをデバッグする場合、問題はありません。エクスプローラーからプログラムを実行し、プロセスをVisual Studioにアタッチして、コードにいくつかのブレークポイントを追加します。しかし、ここでは、起動イベントにブレークポイントを設定する必要があります。 PIDに依存するのではなく、特定のプロセス名または動作する他のソリューションに応じて、プロセスをVisual Studioにアタッチできる必要があります。
もちろん、Visual Studioでプロセスをアタッチする時間を与えるために、スタートアップイベントにThread.Sleep(1000)
を追加することは問題外です。
私は、起動時に例外をスローすることでクラッシュした外部的に生成されたプロセスでC++プラグインをデバッグしていましたが、これは私にとって完璧に機能しました:
無料の Visual Studioの拡張機能を再アタッチ を追加します。起動する前にプロセス名に再アタッチするよう依頼します。プロセス名の起動を待機していることを示すモーダルダイアログが表示されます。
プロセスを起動すると、Visual Studioデバッガーがすぐにアタッチされ、例外をキャッチしてブレークポイントに到達します。
Visual Studio 2017-2019を使用している場合は、次の手順に従います。
他の提案よりもはるかに簡単です。プロジェクトのプロパティを変更する必要はなく、拡張機能は必要ありません。
似たようなものを探していたときに、この答えを見つけました。私の場合、実行可能ファイルをプロジェクトのスタートアッププログラムとして単純に使用することはできませんでした。簡単に再現できない非常に特定の環境で起動する必要があったためです(名前:cygwinから起動)。
Reattach Extensionを mrstrangeで推奨 および非常によく似た Attach To Anything 拡張子として見てみました...通知して添付します。
最終的に私を助けたのはこれです: https://stackoverflow.com/a/4042545/1560865 、MSDNの記事を参照 方法:デバッガーを自動的に起動する -turnは、次のステップをリストします。
debugger
に変更します。vsjitdebugger.exe
。これが将来誰にも役立つことを願っています!
プロセスがない場合、Visual Studioはattachできません。
ただし、プロジェクトのスタートアッププログラムをプロジェクトの出力以外のものに設定できます。
MessageBoxを表示できます。これにより、アプリケーションがブロックされます。その後、デバッガをプロセスにアタッチまたは再アタッチし、[OK]をクリックして続行します。
MessageBox.Show("Attach process to debugger and click ok!");
(winformsを使用する場合)Formコンストラクタに追加できるため、コンポーネントの初期化を除き、これは他の何かの前に実行されます。
public MainForm()
{
InitializeComponent();
MessageBox.Show("Attach process to debugger and click ok!");
}
デバッグが終了したら、その行をコメント化します。
多くの人に合うかもしれない小さなソリューション。
exeが実行するコードの最初の行に、このコマンドを追加します
System.Threading.Thread.Sleep(20000)
これにより、exeが処理を開始する前に20秒間スリープします。次に、プロセスにアタッチするのに20秒かかります。これは、ctrl + alt + pを使用してすばやく実行でき、プロセスを見つけてから、入力してアタッチします。
それほど多くの答えはありませんでしたが、私にとってはおやつになりました