Скажите C встроенной функции, но она по-прежнему доступна для вызова отладчика - PullRequest
0 голосов
/ 07 октября 2018

Есть ли способ пометить функцию как встроенную, но все еще иметь доступную для вызова в отладчике?Все мои функции, которые я хотел бы вызвать, помечены как static inline, потому что нам разрешено выставлять только определенные функции в нашем файле.Я использую GCC.

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Это одна из проблем при оптимизации кода.Вам нужно немного снизить оптимизацию (например, обычные рекомендации в CMake - использовать -O2 вместо -O3) и добавить -fno-omit-frame-pointer в командную строку (это замедлит выполнение кода, так как выделяет регистр для отслеживания).на указатель кадра стека во время вызовов функций).

На таких компиляторах, как ICC, вы можете получить еще больше отладочной информации, используя -debug all.

0 голосов
/ 07 октября 2018

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

Это не обычно, и, конечно, нелегко отлаживать оптимизированный код в любом случае.Обычно можно просто отключить оптимизацию для отладки - по крайней мере, в GCC ключевое слово inline игнорируется при -O0.

0 голосов
/ 07 октября 2018

-ginline-points может помочь:

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

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