Вызов неоднозначной функции в gdb с удаленными символами

#gdb

#gdb

Вопрос:

Я пытаюсь вызвать функцию с

 (gdb) call fun()
  

в сторонней библиотеке libFoo , которую я получаю в скомпилированном виде с разделенными символами.

 (gdb) info function ^fun$
Non-debugging symbols:
0x00007ffff6d7e3b0  fun
  

Проблема в том, что загружена несвязанная системная библиотека libBar , в которой на этот раз также есть fun переменная, и gdb предпочитает этот символ вместо желаемого. Я подозреваю, что это связано с тем, что это попадание является не разделенным символом отладки.

 (gdb) info var ^fun$
File ../bar/baz.c:
256:    static const int fun[18];

(gdb) info symbol fun
fun in section .rodata of libBar.so
  

Немного странно, что он пытается вызвать переменную как функцию, но это то, что он пытается сделать.

Вопрос в том, как мне устранить неоднозначность символа и указать gdb использовать его из libFoo ?

Пока что единственный способ, который я нашел, требует ручного шага ( info function ^fun$ выше), а затем call (void)0x00007ffff6d7e3b0() . Это не слишком хорошо, потому что это не позволяет мне писать сценарий вызова для разных запусков программы.

Комментарии:

1. Может быть лучшее решение, но вы могли бы попробовать это: call ((void(*)())0x00007ffff6d7e3b0)()

2. call ((void(*)())0x00007ffff6d7e3b0)() не лучше, чем (void)0x00007ffff6d7e3b0() . Оба работают, но в обоих случаях адрес специфичен для запуска программы и не может использоваться в скрипте, предназначенном для работы при любом запуске. Но вы, наверное, хотели сказать call ((void(*)())fun)() ? К сожалению, это также пытается вызвать неправильный символ.