Estoy usando visual C# para depurar un proyecto C# grande. El proyecto es muy grande y solo algunos de los pdbs son compilados por mí mismo. Puedo construir todo el pdb, pero lleva mucho tiempo. Estoy depurando una traza inversa, pero una parte de la traza está marcada con [Código externo]. Sé que falta pdb, pero ¿cómo puedo saber en qué DLL reside el código externo? En C, puedo obtener el EIP y luego ver el mapeo del proceso para determinar dónde vive el EIP, pero ¿cómo se puede hacer esto en el entorno .Net?Retroceso de Visual C#: cómo saber dónde reside el [código externo]?
Respuesta
Vaya a Herramientas | Opciones | Depuración | General, y desmarque la casilla de verificación "Habilitar simplemente mi código". Ahora Visual Studio mostrará la pila de llamadas completa (al menos para el código administrado, aún puede ver algunas "transiciones nativas a gestionadas" allí).
Así que si su proyecto es realmente tan grande, entonces supongo que todas sus clases están bien compartidas a lo largo de sus espacios de nombres y que todos los ensamblados llevan el nombre de los espacios de nombres que contienen. Entonces, si observa dónde comienza (o termina) su código externo, debe averiguar desde (o hacia) a dónde va la llamada y determinar el conjunto faltante pdb.
En realidad, no es tan fácil como podría pensar ... –
Pero entonces es un problema de organización de la solución, proyecto, ensamblado, espacio de nombres, jerarquía de clases. Esto para corregir en retrospectiva es aburrido y costoso. Así que aprende para el próximo proyecto e implementa una buena estructura al principio. – Oliver
Por ahora, acaba de construir todos los pdbs (quizás durante la noche). Esto sería más rápido que buscar una solución (tal vez no existente) por días. – Oliver
- 1. ¿Dónde reside el registro de errores de PHP en XAMPP?
- 2. ¿Dónde reside el código del núcleo de Cuda en la GPU nvidia?
- 3. Cómo "Definir (F12)" del código externo en Visual Studio?
- 4. Ctrl-Retroceso Visual Studio 2010
- 5. Visual Lisp: cómo llamar a funciones en DLL C++ externo
- 6. ¿Dónde reside el conjunto de constantes de String de Java, el montón o la pila?
- 7. ¿Cómo saber el tipo de proyecto de Visual Studio desde un proyecto de Visual Studio existente
- 8. ¿Cómo saber de dónde viene mi error?
- 9. ¿Cómo ver el ensamblaje detrás del código usando Visual C++?
- 10. ¿Cómo se refina el código en la imagen visual C#?
- 11. Cómo saber dónde va mi memoria
- 12. ¿Cómo saber de dónde proviene la alerta?
- 13. Perl - ¿Puedo obtener rutas relacionadas con dónde reside un script y desde dónde se ejecutó?
- 14. Dónde descargar Microsoft Visual C++ 2003 redistribuible
- 15. ¿Dónde reside el archivo web.config/app.config para los servicios de temporizador de SharePoint?
- 16. Deshabilitar el retroceso en wpf
- 17. ¿Cómo saber dónde se define una función?
- 18. ¿Cómo portar el código C++ a C++/CLI en Visual Studio?
- 19. Cómo saber dónde está el error mientras se ejecuta ctest
- 20. visual studio 2010 C++ símbolos de depuración cargados pero no se puede encontrar el código fuente
- 21. ¿dónde está el código fuente de C++ filt?
- 22. Visual Studio: ¿cómo depurar una biblioteca con un ejecutable externo?
- 23. Sobrecarga del operador en C# - ¿A dónde debe ir el código de código real?
- 24. Cómo saber el uso de memoria en C++
- 25. Microsoft Visual C++ optimización de código
- 26. ¿Cómo detectar que el código de C# Windows Forms se ejecuta dentro de Visual Studio?
- 27. ¿Dónde está el compilador de C ubicado en el disco para Visual C++ 2008 Express?
- 28. Vender el código fuente, ¿qué debo saber
- 29. ¿Cómo saber si el código está dentro de TransactionScope?
- 30. Visual Studio C++: ¿Al ver el código ASM?
oh sí, se muestra la: \t [Originario de transición controlada] \t \t [arregló para Transición Nativo] \t Pero puedo llegar a donde va la transición? –
No creo que eso sea posible a menos que tenga símbolos (PDB) para el código no administrado. VS puede hacerlo por las partes administradas del seguimiento de la pila porque los ensamblados administrados contienen metadatos, pero el código no administrado no tiene los mismos metadatos, por lo que VS no puede reconstruir las llamadas al método. Sin embargo, puede anclarlo un poco utilizando la ventana Módulos y/o la opción "Mostrar desensamblaje si la fuente no está disponible", pero no tiene experiencia en hacerlo, lo siento. – itowlson
Gracias. Lo que estaba haciendo antes en Linux es que obtengo el EIP (0x800453c me gusta), luego obtengo un mapa de los mapas DLL dinámicos, luego puedo obtener el DLL al que pertenece el EIP. ¿Es factible en Visual C#? –