В ответ на Как оценить функции в GDB? Я нашел рецепт для вызова функции вне моей программы под названием floor
изнутри GDB, например:
(gdb) p floor
$20 = {<text variable, no debug info>} 0x38e10197b0 <floor>
(gdb) p ((double(*)(double))floor)(2.9999)
$21 = 2
(gdb) p ((double(*)(double))floor)(2.000001)
$22 = 2
(gdb)
Что мне нужно сделать, short обновления компилятора, которое не вариант для меня на данный момент, чтобы я мог вызывать функцию таким же образом, в котором Я хотел бы сделать в исходном текстовом файле C / C ++, например:
p floor(2.9999)
В частности, я бы хотел, чтобы не пришлось открыть справочную страницу на floor
, чтобы найти сигнатура функции:
double floor(double x);
, а затем составьте выражение для подачи в команду print
gdb, которая является указателем, принимающим double
, возвращающим double
, с большим количеством скобок.
Итак, является ли единственный способ для нас вызывать эти типы низкоуровневых функций в GDB? Или мне чего-то не хватает? Это потому, что у меня просто не загружены какие-то «символы отладки» или что-то в этом роде? Ссылка no debug info
в приведенном выше выводе заставляет меня поверить, что, возможно, моей машине не хватает какого-то пакета для «символов отладки» или эквивалента, который позволил бы мне express это в нативном C или C ++?
Это специально для Linux. Меня не интересуют ответы на платформу c, поскольку они не имеют отношения к моему варианту использования (хотя, в общем, только для этого вопроса).