После нескольких лет использования большого уродливого макроса MFC ASSERT я, наконец, решил сорвать его и создать конечный макрос ASSERT.
Я в порядке с получением файла и номера строки, и даже выражение, которое не удалось. Я могу отображать в них окно сообщений и кнопки "Прервать/Повторить/Отменить".
И когда я нажимаю Retry, отладчик VS переходит к строке, содержащей вызов ASSERT (в отличие от разборки где-то, как некоторые другие функции ASSERT). Так что все это в значительной степени работает.
Но что было бы действительно круто, было бы отображать имя неудавшейся функции.
Затем я могу решить, отлаживать ли его, не пытаясь угадать, какую функцию он использует в имени файла.
например. если у меня есть следующая функция:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Затем, когда срабатывает ASSERT, в окне сообщений появится следующее:
Function = CMainFrame::OnCreate
Итак, какой самый простой способ узнать текущее имя функции во время выполнения?
Он не должен использовать MFC или платформу .NET, хотя я использую оба из них.
Он должен быть как можно более переносимым.