Dopo anni di utilizzo della grossa macro MFC ASSERT, ho finalmente deciso di abbandonarlo e creare la macro ASSERT definitiva.Come trovare il nome della funzione corrente in fase di esecuzione?
Sto soddisfacendo il numero di file e di riga e persino l'espressione non riuscita. Posso visualizzare una messagebox con questi pulsanti in, e Abort/Retry/Cancel.
E quando si preme Riprova, il debugger VS salta alla riga contenente la chiamata ASSERT (diversamente dal disassemblaggio da qualche parte come alcune altre funzioni ASSERT). Quindi funziona praticamente tutto.
Ma quello che sarebbe davvero bello sarebbe visualizzare il nome della funzione che ha avuto esito negativo.
Quindi posso decidere se eseguire il debug senza cercare di indovinare quale funzione è presente nel nome file.
ad es. se ho la seguente funzione:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Poi, quando i fuochi affermare, il messagebox avrebbe mostrato qualcosa di simile:
Function = CMainFrame::OnCreate
Allora, qual è il modo più semplice di scoprire il nome della funzione corrente, tempo di esecuzione?
Non deve utilizzare MFC o .NET framework, anche se io li uso entrambi.
Dovrebbe essere il più portabile possibile.
Se si ha accesso a John Robbins [Applicazioni di debug per Microsoft® .NET e 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) si dovrebbe assolutamente dare un'occhiata alle asserzioni dalla libreria BugSlayerUtil sul CD in dotazione. Sono specifici per Windows, ma davvero definitivi. – Paul
Ho dato un'occhiata a http://www.koders.com/cpp/fid3653A5E08C30DB8B7551729FBED0BC3D51B19AD8.aspx ma non sembra che mostri il nome della funzione. Perciò penso che la mia versione sia più definitiva della sua: D – demoncodemonkey
Mostra stacktrace. Stacktrace contiene nomi di funzioni, non è vero? – Paul