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