c++ - que - pasa el mouse para ver un campo después del operador->() en Visual Studio mientras se depura
la aplicacion se encuentra en modo de interrupcion visual studio 2017 (2)
Tuve una clase pequeña:
class A{ public:int aField; }
A continuación, mientras estoy depurando, si aField
mouse alrededor de un aField
en a->aField
, Visual Studio mostrará el valor del campo muy bien (como un pequeño reloj).
A* a=new A();
a->aField=1234;
//^ hover here
Luego actualicé el código para anular operator->
: -
class APtr{ //my custom smart pointer
A* ptr;
A* operator->(){ return ptr; }
}
APtr a;
.....
a->aField=1234;
//^ hover here
Ya no aparece pop-up (Hay una ventana emergente para a
, pero no para un aField
)
¿Cómo hacer aparecer el lindo popup?
Editar (razón de Bounty): "user1610015" ha proporcionado una solución factible, pero creo que podría haber una solución más conveniente (solo un poco puede ayudar). Una nueva solución incluso puede sugerirme a algunos complementos u otros IDEs.
Editar 2:
Aquí hay un ejemplo de la linda ventana emergente que quiero.
No funciona para el campo después del operator->
.
¡Ese es exactamente el caso para los visualizadores natvis! Afortunadamente, está usando VS2015, donde son totalmente compatibles.
Para tu ejemplo
class APtr
{
public:
APtr(A* a_Pointer)
{
ptr = a_Pointer;
}
A* operator->()
{
return ptr;
}
private:
A* ptr;
};
Tendrá que crear un archivo con extensión .natvis
, por ejemplo APtr.natvis
, con el siguiente contenido:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="APtr">
<SmartPointer Usage="Minimal">ptr</SmartPointer>
</Type>
</AutoVisualizer>
¡Entonces simplemente agrega este archivo a su proyecto, como cualquier otro archivo .cpp
, y comienza a .cpp
!
Para componer algo más complicado, recomiendo encontrar archivos *.natvis
en C:/Program Files (x86)/Microsoft Visual Studio 14.0
y usarlos como ejemplo.