Определите значение __PRETTY_FUNCTION__ до выполнения во время выполнения - PullRequest
0 голосов
/ 20 июля 2011

В настоящее время я использую __PRETTY_FUNCTION__ при сообщении сообщений (ошибок, предупреждений и т. Д.) В файл журнала. Это обеспечивает отсутствие путаницы в отношении того, какая функция создала сообщение об ошибке.

В данный момент я хотел бы автоматически взять вывод из файла журнала и связать его обратно с кодом, который изначально его создал. Проблема в том, что я не могу определить эффективный метод для сопоставления вывода __PRETTY_FUNCTION__ в лог-файле с именем функции в коде.

Изначально я надеялся, что смогу просто использовать gcc -E, чтобы развернуть все макро константы / компоненты препроцессора и напрямую сравнить вывод файла журнала с исходным кодом. Тем не менее, __PRETTY_FUNCTION__ не является макроконстанцией - это, очевидно, переменная, которая определяется во время выполнения. Поэтому gcc -E не работает.

С http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html:

Эти идентификаторы не являются макросами препроцессора. В GCC 3.3 и ранее, только в C __FUNCTION__ и __PRETTY_FUNCTION__ были обработаны как строка литералы; они могут быть использованы для инициализации массивов символов, и они могут быть объединенным с другими строковыми литералами. GCC 3.4 и позже лечить их как переменные, как __func__. В C ++ __FUNCTION__ и __PRETTY_FUNCTION__ всегда были переменными.

Любые идеи относительно того, как я могу эффективно сопоставить вывод из __PRETTY_FUNCTION__ с функциями в исходном коде?

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Использование __LINE__ и __FILE__ - это простое и относительно простое решение.Изменения в ваших функциях журнала также должны быть относительно незначительными.Если вам нужна информация о покрытии кода, вам, вероятно, лучше использовать GCOV.

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/index.html#toc_Gcov

http://bobah.net/d4d/tools/code-coverage-with-gcov

2 голосов
/ 20 июля 2011

__PRETTY_FUNCTION__ обычно используется с __FILE__ и __LINE__ для определения места в исходном коде.

См. Стандартные предопределенные макросы для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...