После долгих лет использования большого уродливого макроса MFC ASSERT я, наконец, решил сорвать его и создать максимальный макрос ASSERT.Как найти имя текущей функции во время выполнения?
Я в порядке с получением файла и номера строки, и даже выражение, которое не удалось. Я могу отображать окно сообщений с этими кнопками и Abort/Retry/Cancel.
И когда я нажимаю Retry, отладчик VS переходит к строке, содержащей вызов ASSERT (в отличие от разборки где-то, как некоторые другие функции ASSERT). Так что это все работает.
Но что было бы круто было бы отображать имя функции, которая не удалась.
Тогда я могу решить, следует ли его отлаживать, не пытаясь угадать, какая функция находится в имени файла.
например. если у меня есть следующие функции:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Тогда, когда Assert пожары, то MessageBox бы показать что-то вроде:
Function = CMainFrame::OnCreate
Итак, что это самый простой способ узнать текущее имя функции, в во время выполнения?
Нельзя использовать MFC или платформу .NET, хотя я использую оба эти параметра.
Он должен быть как можно более переносимым.
Если у вас есть доступ к приложениям отладки John Robbins для Microsoft® .NET и 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), вы должны обязательно посмотреть на утверждения из библиотеки BugSlayerUtil на прилагаемом компакт-диске. Они являются Windows-специфическими, но действительно конечными. – Paul
Я посмотрел на http://www.koders.com/cpp/fid3653A5E08C30DB8B7551729FBED0BC3D51B19AD8.aspx, но он, похоже, не показывал имя функции. Поэтому я думаю, что моя версия более совершенна, чем его: D – demoncodemonkey
Он показывает stacktrace. Stacktrace содержит имена функций, не так ли? – Paul