я пытался отладить va_list аргумент и распечатать код переменного образца значения:отладки va_list арг с помощью GDB
#include <stdarg.h>
#include <stdio.h>
double average(int count, ...)
{
va_list ap;
int j;
double sum = 0;
va_start(ap, count); /* Requires the last fixed parameter (to get the address) */
for (j = 0; j < count; j++) {
sum += va_arg(ap, int); /* Increments ap to the next argument. */
}
va_end(ap);
return sum/count;
}
int main(int argc, char const *argv[])
{
printf("%f\n", average(3, 1, 2, 3));
return 0;
}
так я пытался отладить ар va_list аргумента и я написал
(gdb) p *(int *)(((char *)ap[0].reg_save_area)+ap[0].gp_offset)
но я получить в результате от GDB
Attempt to dereference a generic pointer.
здесь изображение для результата:
Приоритет оператора? –
Похоже, что gcc на Ubuntu 16.04 не полностью вводит тип 'ap' в раздел debuginfo исполняемого файла. В нем говорится, что это 'va_list', который является' __gnuc_va_list', но не содержит никакой другой информации для '__gnuc_va_list'. Работает нормально с стандартной версией clang на 16.04. –
Так что я могу сделать, чтобы компилировать с clang? –