10

Visual Studio 2008 SP1 と VB.NET プロジェクトの使用。ステップインできないコードがあります。イミディエイト ウィンドウに、「シンボル 'Some.Namespace.Here' なしでメソッドをステップ オーバーしています」というメッセージが表示されます。

メソッドに常にシンボルがあることを確認するにはどうすればよいですか?! コードのすべての行にステップインする必要があります。F8を押しています(VS2008では「ステップイン」です。メモリから、VS2005ではF11だったと思います)。

このデバッガーのものはいつも私を混乱させました: ソリューション レベルのプロパティ ページで、アクティブ (デバッグ)、デバッグ、リリース、すべての構成の 4 つの値を持つ構成ドロップダウンが表示されます。- 現在は「アクティブ (デバッグ)」に設定されています。プロジェクト レベルでは、デバッグ、リリースの 2 つの値を持つ構成ドロップダウンが表示されます。- 現在「デバッグ」に設定されています

4

3 に答える 3

22

これは古い質問ですが、IEnumerableを返すメソッドでyield機能を使用している可能性がありますか?

例(考案):

public IEnumerable<object> GetObjects(IEnumerable<object> objects)
{
    foreach(var obj in objects)
        yield return obj;
}

私はユニットテストでこれに頻繁に遭遇しますが、遅延評価のため、yieldステートメントは必要になるまで処理されません。列挙を強制する1つの方法は、たとえば.ToList()を呼び出し元のステートメントに追加することですが、呼び出しが列挙自体が重要ではない一部の機能のテストである場合を除いて、永続的に実行することは望ましくありません。

したがって、次のことを行うと、列挙になります。

GetObjects(new List<object>()).ToList();

つまり、列挙が必要なメソッドを呼び出しているが、結果を列挙しない場合は、出力にそのエラーが表示されます。これは、.SelectなどのLINQステートメントでも発生する可能性があります。

編集:それがVB.NETプロジェクトであることに気づきませんでしたが、原則はまだ有効であると確信しています。

于 2010-04-15T11:06:25.760 に答える
4

Visual Studio 2010 でもまったく同じ問題に遭遇しました。.NET Framework ソースにステップ インしようとすると、Visual Studio がそれをステップ オーバーし、出力ウィンドウに、シンボル ファイルが読み込まれていないため、ステップ インできないと表示されます。しかし、モジュール ウィンドウを見ると、関連するシンボル ファイルが実際に読み込まれていることがわかります。

問題は、.NET シンボル ファイルが読み込まれましたが、ソース情報が含まれている .NET シンボル ファイルではなかったことです。Microsoft のパブリック シンボル サーバー ( http://referencesource.microsoft.com/symbols )には、ソース情報を含むシンボルが含まれています。Microsoft のパブリック シンボル サーバー ( http://msdl.microsoft.com/download/symbols )には、ソース情報のないシンボルが含まれています。

1 つの解決策は、_NT_SYMBOL_PATH を正しく設定して、存在する場合はhttp://referencesource.microsoft.com/symbolsから、存在しない場合はhttp://msdl.microsoft.com/download/symbolsから .NET Framework シンボルを取得することです。次のようなものが機能します。

_NT_SYMBOL_PATH=SRV*d:\SymbolsCache*http://referencesource.microsoft.com/symbols;SRV*d:\SymbolsCache*http://msdl.microsoft.com/download/symbols

この _NT_SYMBOL_PATH により、デバッガーは最初にソース情報を含むシンボルを検索し、存在しない場合はソース情報を含まないシンボルを取得します。Visual Studio にソース情報を含むシンボル ファイルがある場合、そのコードにステップ インできます。

于 2010-12-22T19:41:14.570 に答える
0

問題の名前空間が、シンボル (pdb ファイル) に付属していないサード パーティの dll である場合、これが発生します。「ステップ イン」するには、シンボル ファイルが必要です。

それが独自のコードである場合は、シンボル ファイルが存在することを再確認する必要があります。プロジェクトレベルでデバッグするように設定すると、これを行う必要があります。

于 2009-09-30T01:29:53.980 に答える