Как оценить функции в GDB без болезненного набора типов? - PullRequest
1 голос
/ 25 марта 2020

В ответ на Как оценить функции в 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, поскольку они не имеют отношения к моему варианту использования (хотя, в общем, только для этого вопроса).

1 Ответ

2 голосов
/ 25 марта 2020

Что мне нужно сделать

Вы должны установить libc6-dbg или аналогичный пакет символов отладки для lib c (floor находится в libm, что часть GLIB C).

Без символов отладки GDB не имеет представления о типе floor.

...