Después de años de usar la gran macro fea MFC ASSERT, finalmente he decidido deshacerme de ella y crear la macro ASSERT final.¿Cómo encontrar el nombre de la función actual en tiempo de ejecución?
Estoy bien con obtener el número de archivo y línea, e incluso la expresión que falló. Puedo mostrar un cuadro de mensaje con estos botones, y Abortar/Reintentar/Cancelar.
Y cuando presiono Reintentar, el depurador VS salta a la línea que contiene la llamada ASSERT (a diferencia del desensamblaje en algún lugar como algunas otras funciones ASSERT). Entonces todo está funcionando.
Pero lo que sería genial sería mostrar el nombre de la función que falló.
Luego puedo decidir si debo depurarlo sin tratar de adivinar de qué función proviene el nombre del archivo.
p. Ej. si tengo la siguiente función:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Luego, cuando los incendios ASSERT, el cuadro de mensaje mostrarían algo como:
Function = CMainFrame::OnCreate
Así que, ¿cuál es la forma más sencilla de conocer el nombre de la función actual, por lo tiempo de ejecución?
No debería usar MFC ni el .NET framework, aunque sí uso ambos.
Debe ser lo más portátil posible.
Si tiene acceso a las [aplicaciones de depuración de John Robbins para Microsoft® .NET y Microsoft Windows®] (http://www.amazon.com/Debugging-Applications-Microsoft®-Microsoft-Pro-Developer/dp/0735615365/ref = sr_1_16/175-5814253-7853112? Ie = UTF8 & s = electronics & qid = 1237928779 & sr = 8-16) definitivamente debe ver las aserciones de la biblioteca BugSlayerUtil en el CD suministrado. Son específicos de Windows, pero realmente definitivos. – Paul
Eché un vistazo a http://www.koders.com/cpp/fid3653A5E08C30DB8B7551729FBED0BC3D51B19AD8.aspx pero no parecía mostrar el nombre de la función. Por lo tanto, creo que mi versión es más definitiva que la suya: D – demoncodemonkey
Muestra stacktrace. Stacktrace contiene nombres de funciones, ¿no es así? – Paul