Инструментарий gcc - возможно ли автоматически выводить аргументы функции? - PullRequest
2 голосов
/ 30 сентября 2019

Я знаю о -finstrument-functions:

Генерация инструментария вызовов для входа и выхода в функции. Сразу после входа в функцию и непосредственно перед ее выходом следующие функции профилирования вызываются с адресом текущей функции и ее сайта вызова. (На некоторых платформах __builtin_return_address не работает за пределами текущей функции, поэтому в противном случае информация сайта вызова может быть недоступна для функций профилирования.)

Но это только выводит адрес функции и вызывающегоа не какие-либо из входов или выходов функции.

void __cyg_profile_func_enter (void *this_fn,
                               void *call_site);
void __cyg_profile_func_exit  (void *this_fn,
                               void *call_site);

Я хочу cout << аргументы, чтобы я мог провести тестирование whitebox / интегрирования: тестирование ввода и вывода наборафункционирует по пути выполнения в ответ на событие.

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

ВОПРОС

Но есть ли способ выполнить этот инструментарий, используя только gcc опции?

МЫСЛИ

Для этого используйте только gccи C ++, я думаю, мне нужен был бы способ перебрать аргументы функции, чтобы я мог вызывать оператор << каждого объекта.

1 Ответ

0 голосов
/ 01 октября 2019

есть ли способ выполнить это инструментирование, используя только параметры gcc?

No.

Флаг -finstrument-functions выполняет передачу по всем определенным функциям, ивставляет немного кода в каждый из них.

Вы хотите расширить этот проход до "для каждой функции, выполнить итерацию по всем ее аргументам и вставить дополнительный бит кода для каждой".

Я не верю, что такая функциональность существует в GCC, поэтому вам придется создать пользовательский проход GCC (не тривиальное предложение).

Кроме того, "cout << arg" не является чем-то вроде GCCpass мог бы сделать - ваш pass должен был бы выяснить, какой из многих перегруженных <code>cout::operator<<(...) методов вызывать, и не каждый тип может передаваться таким образом.

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