web-dev-qa-db-ja.com

Visual Studio:プロセスが生成されたときにプロセスに自動的にアタッチします

生成されたらすぐにプロセス(a.exe)に添付したいのですが、VSで実行できますか?プロセスの名前しか知りません。実際に私が達成したいのは、c#コードにブレークポイントを設定することですが、コードは現在実行中のアプリケーション(c.exe)によって起動される別の実行可能ファイルに属します。コードは初期化期間内にあるため、手動でアタッチすることはできません。

64
Bin Chen

以前にこの状況に直面した(そして両方のプロセスを制御した)とき、適切な回避策は、生成プロセスのエントリポイントで Debugger.Launch() を呼び出すことです。 VSはダイアログボックスをポップアップ表示し、プロセスにアタッチさせます。

66
Mark Simpson

MSDNの記事、 方法:デバッガーを自動的に起動する を参照してください-これにより、確認ダイアログボックスをクリックするという忙しい作業をスキップできます(UACやその他の混乱をオフにすることなく)この記事には、次の手順が記載されています。

  1. レジストリエディター(regedit)を起動します。
  2. レジストリエディターで、HKEY_LOCAL_MACHINEフォルダーを開きます。
  3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\imageファイル実行オプションに移動します。
  4. Image File Execution Optionsフォルダーで、デバッグするアプリケーションの名前(myapp.exeなど)を見つけます。デバッグするアプリケーションが見つからない場合:
    a。 Image File Execution Optionsフォルダーを右クリックし、ショートカットメニューでNew Keyをクリックします。
    b。新しいキーを右クリックし、ショートカットメニューでRenameをクリックします。 c。キー名をアプリケーションの名前に編集します。 myapp.exe、この例では。
  5. myapp.exeフォルダーを右クリックし、ショートカットメニューでNew String Valueをクリックします。
  6. 新しい文字列値を右クリックし、ショートカットメニューで[名前の変更]をクリックします。
  7. 名前をデバッガーに変更します。
  8. 新しい文字列値を右クリックし、ショートカットメニューでModifyをクリックします。 Edit Stringダイアログボックスが表示されます。
  9. Value dataボックスに、vsjitdebugger.exeと入力します。
  10. [〜#〜] ok [〜#〜]をクリックします。
  11. Registryメニューから、Exitをクリックします。
  12. Vsjitdebugger.exeを含むディレクトリは、システムパスに存在する必要があります。システムパスに追加するには、次の手順を実行します。
    a。クラシックビューでControl Panelを開き、Systemをダブルクリックします。
    b。 Advanced System Settingsをクリックします。
    c。 System Propertiesで、Advancedタブをクリックします。
    d。 Advancedタブで、Environment Variablesをクリックします。
    e。 Environment VariablesダイアログボックスのSystem variablesで、Pathを選択し、次にEditボタンをクリックします。
    f。 システム変数の編集ダイアログボックスで、ディレクトリを変数値ボックスに追加します。セミコロンを使用して、リスト内の他のエントリから区切ります。
    g。 [〜#〜] ok [〜#〜]をクリックして、システム変数の編集ダイアログボックスを閉じます。
    h。 [〜#〜] ok [〜#〜]をクリックして、Environment Variablesダイアログボックスを閉じます。私。 [〜#〜] ok [〜#〜]をクリックして、System Propertiesダイアログボックスを閉じます。
  13. ここで、任意の方法を使用してアプリケーションを起動します。 Visual Studioはアプリケーションを起動してロードします
27
Ruben Bartelink

別の素晴らしい解決策は、Visual Studio拡張機能「再接続」を使用することです。見つけることができます こちら

プロセスが現在実行されていない場合、ReAttachはプロセスを開始し、使用可能になるとすぐに接続するように要求します。

9
Mark Kowalski

受け入れテスト内でコンソールアプリケーションを起動するときに、これを行う方法を探していました。

今日これを見つけました- https://blogs.msdn.Microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/

Visual Studioのアドオンであり、機能します。受け入れテストをデバッグし(resharperテストランナーを使用)、起動するアプリ内にブレークポイントを配置すると、同じVisual Studioインスタンスでアプリをデバッグできるようになりました。

8
Antony Scott

"Entrian Attach" はまさにこれを行うVisual Studioアドインです。実行可能ファイルの名前を指定すると、コードの前に、プロセスの開始方法に関係なく、プロセスの開始時にデバッガーがアタッチされます。実行しました。

(開示:私は著者です。この問題は常にあるため、Attachを作成しました!)

5
RichieHindle

また、Windowsデバッグツールに付属のgflags.exeユーティリティを使用することもできます。必要なのは、gflags.exeを開き、イメージファイルに移動して、プロセス名(a.exe)を入力し、TextBoxでデバッガーチェックボックスをオンにすることです。/debugexeオプションを使用してvsパスを入力します(例:「C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe」/ debugexe)

プロセスが実行されると、自動的にビジュアルスタジオが開きます。ブレークポイントを追加して[実行]を押すことができます。

3
Pablo Retyk

これについてはどうですか:a.exe VSで、ブレークポイントなどを設定します。次に、プロジェクトプロパティ a.exe、デバッグタブを開き、コマンドc.exe。次に、単にDebugを押します。

残念ながら、私はマネージドプロジェクトでこれをやったことがないので、ここから外れることができます。ただし、それはアンマネージ(C++)プロジェクトで行う方法です。マネージデバッガもサポートする必要があると思います。

3
atzz

C#コードがアンマネージコードによって起動される場合は、「アンマネージコードのデバッグ」@Projectプロパティ->デバッグオプションを必ず確認してください。

0
Phanidhar

@ -RichieHindleが示唆しているように Entrian Attach が本当に好きでしたが、似たようなことをするこの無料ツールも見つけました。デバッグプロセスによって開始されたすべてのプロセスをキャッチします。

生成されたプロセスキャッチャー: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher

0
Marnix

VS 2013 SP2には、Microsoftの無料ツールがあります。これは、前述の「Spawned Process Catcher」と同じことを行います。すべてのプロセスを添付します。これらのプロセスは、デバッグ中のプロセスによって開始されます。注:私はこれをアンマネージC++でのみテストしました(これは問題なく動作します)。

Microsoft子プロセスデバッグパワーツール

MSDNブログエントリ

0
user2328447