リモートデバッグ時にシンボルが読み込まれないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/151966

質問

リモートデバッグを使用したい。 デバッグするプログラムはマシンbで実行されます。 Visual Studioはマシンaで実行されます。

マシンbには、次のファイルを含むフォルダーがあります:

  • msvcr72.dll
  • msvsmon.exe
  • NatDbgDE.dll
  • NatDbgDEUI.dll
  • NatDbgEE.dll
  • NatDbgEEUI.dll

いくつかのファイルが欠落していると思われる場合、それらが通常どこにあるのかを説明してもらえますか?

次のステップでは、マシンbで msvsmon.exe とプログラムを開始しました。マシンaで、Visual Studio 2008とプログラムを作成したソリューションを開始しました。次に、「デバッグ-プロセスにアタッチ」を選択します。 「リモートトランスポート(認証なしのネイティブのみ)」を選択しました。修飾子として正しいIPを使用し、適切なプロセス(program.exe)を使用しました。しばらくすると、ポップアップウィンドウで次のメッセージが表示されました。

  

program.exeの0x7c812a7bで処理されない例外:0xE0434F4D:0xe0434f4d

続行または中断できます。続行すると、例外が何度も何度も発生します。だから私はブレークを押して、次のメッセージが発生しました:

  

どのコールスタックフレームにもシンボルはロードされません。ソースコードを表示できません。

役に立ちましたか?

解決

アセンブリで生成された.PDBファイルをリモートマシンの同じフォルダーにコピーしてください。これにより、デバッガーはデバッグシンボルを取得できます。

他のヒント

  1. .pdbファイルの場所を指す共有フォルダーを開発マシンに追加します
  2. 開発マシンの共有フォルダーを指すリモートマシンで _NT_SYMBOL_PATH という環境変数を設定します

リモートデバッガーは、開発マシンでシンボルを検索します。ビルドごとにコピーする必要はありません。

MSビデオを参照こちら

8〜9分で視聴を開始します。開発マシンのドライブ共有からシンボルをロードするためのリモートデバッガーのセットアップ方法を説明します。

がんばって!

  • Visual Studio 2010の[ツール]メニューで、[オプション]を選択します。
  • [オプション]ダイアログボックスで、[デバッグ]ノードを開き、[全般]をクリックします。
  • 必要に応じて[すべての設定を表示]をオンにし、[マイコードのみを有効にする]を見つけます。 (管理のみ)
  • チェックを外し、[OK]をクリック

リモートプロセスをアタッチできるようになった後

.PDBファイルをデバッグされたコードが存在する同じディレクトリに配置しない場合、.NETでのリモートデバッグは機能しません。

VSがまだデバッグ用のソースを見つけられない場合、デバッグされたコードとVSプロジェクトソースは同じバージョンではありません。ソリューションは、プロジェクトの再構築と再デプロイです。

0xE0434F4Dは、CLR(つまり、マネージコード)の例外です。認証を使用してリモートデバッグを実行し、マネージコードのデバッグを選択する必要があります。あるいは、いくつかのデバッガー拡張機能を使用して、管理された例外情報を抽出することもできますが、もう少し手間がかかります。

参照:

壊れている場合...

1800情報は正しいです。マネージコードをデバッグするには、Windows認証を使用してリモートデバッグを行う必要があります。そうしないと、マネージアセンブリのシンボルを読み込むことができません。これを認証で動作させることは、とりわけ同じパスワードを持つ両方のマシンのローカルアカウントを必要とするため、かなり注意が必要です。この質問と全員の回答は、それを機能させるのに非常に役立ちます。

Visual Studio(VS2008)、Windowsフォームでのリモートデバッグアプリケーション

同じ問題がありました。 msdnフォーラムで回答を見つけましたここに正しい答えをコピー/貼り付けます:

  

使用していることを確認してください   msvsmon.exeの正しいバージョン!!!       それだけです! C#のリモートデバッグ中に同じ問題が発生しました   応用。私はx64を使用していました   サーバーが実行されているため、msvsmon.exe   Windows Server 2008 64ビット、ただし   アプリケーションはx86用に作成されたため、   のx86バージョンを実行する必要がありました   取り除くためにmsvsmon.exe   この迷惑なエラー。       他に何も必要ありませんでした。次のバージョンのmsvsmon.exeを実行するだけです   ターゲットアーキテクチャに対応   アプリケーションの^ _ ^

上記の答えは正しいのですが、デバッグ中のアセンブリを使用してビルドされたPDBがリモートの場所にあり、ピックアップされていない場合がありました。 TFSまたはデバッグシンボルの発行をサポートする別のビルドメカニズムを使用している場合は、実行することをお勧めします。次に、Visual Studioの[オプション]> [デバッグ]> [シンボル]で[シンボルサーバー]オプションにその場所を追加して、一致するシンボルが見つかったときにそれらのシンボルを読み込むことができます。

これにより、動的に呼び出されるアセンブリ(アセンブリでシンボルを公開するだけでは動作しなかったもの)であっても、実行中の実行中のあらゆるものの近くでデバッグできます。この非常に便利な機能を利用してください!

[プロジェクトのプロパティ]、[コンパイル]タブに移動し、リモートマシンへのビルド出力パスを設定することにより、これを機能させることができました。 \ myserver \ myshare \ myappdir

[デバッグ]タブで、[リモートマシンを使用する]をオンにし、myserverに設定しました

カスタムのビルド構成を使用しているときにもこれに遭遇しました。 (デバッグではなく DEV

これを修正するために、プロジェクトプロパティを変更しました->;ビルド->&gt;出力-&gt;詳細設定と出力->;デバッグ情報設定が full または< strong> pdbのみ。通常、デフォルトの[リリース]設定は[なし]に設定されています。

ツール-&gt;オプション-&gt;デバッグ-&gt;シンボルに移動し、実行可能ファイルの.pdbファイルへのパスを追加します。ローカルマシン上のパスは正常に機能しました。

ドキュメントによると、マネージド(Visual Studio 2012を使用してリモートマシンでマネージドWindowsサービス(.net 4.5に対してビルド)にアタッチしようとした)の場合、シンボルはリモートマシン上にあるはずです。

したがって、リモートマシン上でシンボルを保持し(リモートマシン上のアプリケーションのモジュール/アセンブリと一致することを確認)、それを共有し、ローカルシステム(実行中の場所)からのシンボル設定を介して参照します。

注:サービスとシンボルは、2k12 + .net 4.5 Windowsサービスで動作するのと同じディレクトリにある必要はありません。

詳細:

http://msdn.microsoft。 com / en-us / library / bt727f1t(v = vs.100).aspx

リンクからの抜粋:

シンボル(.pdb)ファイルの配置


シンボルファイルには、コンパイルされた実行可能ファイルのデバッグ情報が含まれています。デバッグするアプリケーションのシンボルファイルは、アプリケーションの実行可能ファイルがコンパイルされたときに作成されたファイルでなければなりません。シンボルファイルは、デバッガーが見つけられる場所にも配置する必要があります。

&#8226;ネイティブアプリケーションのシンボルファイルは、Visual Studioホストコンピューターに配置する必要があります。

&#8226; 管理対象アプリケーションのシンボルファイルは、リモートコンピューターに配置する必要があります。

&#8226;混合(管理およびネイティブ)アプリケーションのシンボルファイルは、Visual Studioホストコンピューターとリモートコンピューターの両方に配置する必要があります。

よろしく!

この問題に遭遇しましたが、上記の解決策では解決しませんでした。私の場合、VS2010ソリューションには多くのプロジェクトが含まれていました。リモートでデバッグしようとしたプロジェクトは、メイクアップスクリプトが適切ではなかったため、VS2010ソリューションでスタートアッププロジェクトとして設定されていません

ソリューション内でプロジェクトを右クリックし、デバッグしようとして StartUpプロジェクトとして設定を選択すると、シンボルが適切に読み込まれ、ブレークポイントにヒットしました。

リモートデバッグ中に同じ問題が発生しましたが、VS 2008では次の手順で解決されました。

  1. バイナリと一緒にローカルpdbファイルをコピーします
  2. アプリケーションがビルドされたのと同じバージョンのmsvmonを実行します。アプリケーションがx86アーキテクチャ用にビルドされている場合、x64マシンで実行している場合でも、x86バージョンのmsvmonを実行する必要があります。実行しようとすると警告が表示されますが、実行する必要があります。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top