2009-09-30 11 views
10

Usando Visual Studio 2008 SP1 y un proyecto VB.NET; Tengo un código en el que no puedo entrar. La ventana Inmediato muestra el mensaje "Paso por el método sin símbolos 'Some.Namespace.Here'"Pasar por encima del método sin símbolos - ¿Cómo entrar?

¿Cómo puedo asegurarme de que el método siempre tenga símbolos? Necesito entrar en cada línea de código. Estoy presionando F8 (que es "Paso a paso" en VS2008, de memoria, creo que solía ser F11 en VS2005).

Este depurador siempre me ha confundido: En las páginas de propiedades del nivel de solución veo un menú desplegable de configuración con 4 valores: activo (depuración), depuración, versión, todas las configuraciones. - actualmente configurado como "Activo (depurar)" En el nivel Proyecto, veo un menú desplegable de configuración con 2 valores: Depurar, liberar. - actualmente establecido en "Depurar"

Respuesta

0

Si el espacio de nombres en cuestión es un dll de terceros que no viene con los símbolos (archivo pdb), esto ocurrirá. Para "entrar", se necesita el archivo de símbolos.

Si es su propio código, entonces solo necesita verificar que sus archivos de símbolos existen. Tenerlo configurado para depurar a nivel de proyecto debería hacer esto.

+1

Sí, es mi propio código y lo configuré como "Activo (Depurar)" en el nivel del Proyecto (y también en el nivel de Solución, como se describe en mi pregunta inicial). Puedo ver los archivos .pdb, de hecho los eliminé manualmente y volví a compilar para que se vuelvan a producir. Espero que los métodos frm.Show() y frm.Focus() entren en el evento frm_Activated, ya que presiono F8, pero esto NO sucede. Tengo que poner un punto de ruptura de forma manual en este evento. – joedotnot

22

Sé que esta es una pregunta anterior, pero ¿quizás está utilizando la funcionalidad de rendimiento en un método que devuelve un Enumerable?

Por ejemplo (artificial):

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

me encuentro con esto en mis pruebas de unidad a menudo, pero debido a la evaluación perezosa, declaraciones de rendimiento no procesan hasta que sea necesario. Una forma de forzar la enumeración es unir .ToList() a la declaración de llamada, por ejemplo, aunque no desearía hacer eso permanentemente a menos que la llamada sea quizás una prueba para alguna funcionalidad donde la enumeración en sí misma no es importante.

Así que haciendo lo siguiente debe dar lugar a la enumeración:

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

En resumen, si usted está llamando a un método que requiere la enumeración, pero luego nunca se enumera el resultado, obtendrá que el error en la salida. Esto también podría ocurrir con las declaraciones LINQ, como .Select.

Editar: No noté que era un proyecto de VB.NET, pero estoy bastante seguro de que el principio sigue en pie.

4

Me encontré con el mismo problema exacto en Visual Studio 2010. Intenté entrar en el origen de .NET Framework, Visual Studio lo pisaría, la ventana de salida diría que no podría entrar porque el archivo de símbolos no se cargó, pero cuando miré la ventana de módulos vería que el archivo de símbolos relevante estaba de hecho cargado.

El problema era que el archivo de símbolos .NET se había cargado pero no era el archivo de símbolos .NET con la información de origen incluida. El servidor de símbolos público de Microsoft en http://referencesource.microsoft.com/symbols contiene símbolos con información de origen incluida. El servidor de símbolos público de Microsoft en http://msdl.microsoft.com/download/symbols contiene símbolos sin información de origen.

Una solución es establecer _NT_SYMBOL_PATH correctamente para que capture los símbolos de .NET Framework de http://referencesource.microsoft.com/symbols si existen y de http://msdl.microsoft.com/download/symbols en caso contrario.Algo como esto funcionaría:

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

Este _NT_SYMBOL_PATH hará que el depurador busque primero símbolos con información de origen y luego, si no hay ninguno, obtendrá los símbolos sin él. Cuando Visual Studio tiene un archivo de símbolos con la información de origen, puede acceder a ese código.

Cuestiones relacionadas