c++ - ¿Hay alguna forma de evitar automáticamente entrar en ciertas funciones en Visual Studio?
visual-studio debugging (5)
Conozco la opción de depuración "Habilitar solo mi código", pero eso solo funciona para el código administrado.
Estoy buscando una forma de entrar en una llamada a función sin tener que pasar, por ejemplo, un operador de conversión de cadenas STL porque hay una conversión implícita de un carácter * a una cadena en uno de los parámetros de la función.
Desde Visual Studio 2012, eche un vistazo al siguiente archivo:
C:/Program Files[ (x86)]/Microsoft Visual Studio 11.0/Common7/Packages/Debugger/Visualizers/default.natstepfilter
Encontré esta entrada de blog que tiene una solución. Aunque preferiría poder decir "no pise algo que no sea parte de este proyecto", parece factible.
EDITAR: después de mirar algunos blogs y grupos de noticias, el método es agregar una entrada para cada función en la que no quiera entrar bajo esta clave de registro (suponiendo VS 2005):
32 bit Windows //HKEY_LOCAL_MACHINE/Software/Microsoft/VisualStudio/8.0/NativeDE/StepOver 64 bit Windows //HKEY_LOCAL_MACHINE/Software/Wow6432Node/Microsoft/VisualStudio/8.0/NativeDE/StepOver
Números de versión para la ruta:
Visual Studio 2005: 8.0 Visual Studio 2008: 9.0 Visual Studio 2010: 10.0 Visual Studio 2012: 11.0 Visual Studio 2013: 12.0
Esta clave contiene un conjunto de reglas que afectan cómo se realiza el paso. Cada regla se especifica como una entrada separada cuyo nombre es un número decimal y cuyo valor es un patrón de nombre de función que especifica a qué funciones queremos afectar. p.ej
"10" = "boost/:/:scoped_ptr.*/:/:.*=NoStepInto"
evita entrar en las funciones boost :: scoped_ptr.
Las reglas se evalúan de valores altos a bajos hasta que se encuentra un patrón coincidente, o no quedan reglas. En ese caso, la función entra en escena.
Los nombres de las funciones son expresiones regulares.
Los puntos deben ser citados con una barra invertida.
Puede especificar StepInto así como NoStepInto. Esto le brinda una manera de evitar entrar en todas las funciones menos en el mismo ámbito / espacio de nombres.
Reinicie Visual Studio para recoger los cambios en el registro.
Mi copia-pasado:
Evitando entrar en las cosas
A menudo es útil evitar entrar en algún código común como constructores u operadores sobrecargados. autoexp.dat proporciona esta capacidad. Agregue una sección llamada "[ExecutionControl]". Agregue claves donde la clave es el nombre de la función y el valor es "NoStepInto". Puede especificar un asterisco (*) como un comodín como primer conjunto de dos puntos para un espacio de nombres o clase.
autoexp.dat solo se lee en el inicio de Visual Studio.
Para ignorar la función myfunctionname, y todas las llamadas a la clase CFoo:
[ExecutionControl]
myfunctionname = NoStepInto
CFoo :: * = NoStepInto
Para ignorar la construcción y la asignación de CStrings de MFC: (Observe el extra = en CString :: operator =.)
[ExecutionControl]
CString :: CString = NoStepInto
CString :: operator == NoStepInto
Para ignorar todas las llamadas ATL:
[ExecutionControl]
ATL :: * = NoStepInto
de este ( http://www.highprogrammer.com/alan/windev/visualstudio.html ) artículo.
También puede usar "Paso a la función específica" del menú pupup.
Editar Lo siento, parece que autoexp.dat no funciona en vs 2003/2005. Lo mismo que puedes hacer con la configuración de registro. http://groups.google.com/group/microsoft.public.vsnet.debugging/browse_thread/thread/b03dee5a626470c0/26addb1b539883e8
También está la entrada "paso a específico" en el menú de contexto, que enumerará las funciones que podrían incluirse en la línea actual, y usted puede elegir la que desee.
VS6 solía permitirle definir valores en el archivo de autoexp que le permiten omitir el paso a funciones comunes (por ejemplo, constructores de cadenas). A partir de VS7, estas exclusiones se trasladaron al registro. La facilidad de uso toma un golpe serio.
En VS7 y superior Microsoft, en su sabiduría, movió estas exclusiones al registro. Aquí hay unos ejemplos:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/9.0/NativeDE/StepOver]
"10"="CString//://:CString=NoStepInto"
"11"=".*//.c_str.*=NoStepInto"
Los nombres clave representan el orden de búsqueda. Los valores clave contienen expresiones regulares VS para buscar.
Si crea sus propias exclusiones, asegúrese de obtener el nombre de la vista de desensamblaje. La declaración en el origen puede no coincidir con el nombre generado del compilador, especialmente para las funciones con plantilla.