Удаленная отладка GDB - программа падает при входе в общую библиотеку - PullRequest
0 голосов
/ 17 февраля 2011

Я скомпилировал приложение, предназначенное для Linux, на хосте Cygwin.Программа работает нормально на цели, а также с gdbserver.Однако, когда я пытаюсь пройтись по программе, она падает, когда я вхожу в функцию общей библиотеки.Отражение отпечатков gdb:

(gdb) bt#0 0x00000000004008f4 in ?? ()#1 0x0000003f0380d7e4 in ?? ()#2 0x00002b1373630000 in ?? ()#3 0x00002b1373630590 in ?? ()#4 0x00002b1373631348 in ?? ()#5 0x00002b1373631888 in ?? ()#6 0x0000003f03a1c510 in ?? ()#7 0x0000000000000000 in ?? ()

Если я установлю точку останова на функцию и продолжу ее работу, она не будет аварийно завершена.

Это hello.c:

void foo(int*);
int main()
{
    int a;
    foo(&a);
    return a;
}

, скомпилированное с x86_64-unknown-linux-gnu-gcc -g -c hello.c .

и foo.c:

void foo(int *i)
{
    *i = 2;
}

скомпилировано с x86_64-unknown-linux-gnu-gcc -g -shared -Wl, -soname, libfoo.so -o libfoo.so foo.c .

Связь с x86_64-unknown-linux-gnu-gcc -Wl, -rpath ,.libfoo.so hello.o -o привет .

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Я тоже видел такие ситуации, хотя в вашем примере это не кажется воспроизводимым (опять же, я не кросс-компилировал).Тем не менее, подсказки для решения таких ситуаций ...

  • Прежде всего, конечно, рекомендуется компиляция с -O0 -ggdb3 (а не только -g).
  • Использование LD_BIND_NOW=1 gdb helloчтобы отключить такое ленивое разрешение.
  • Если это не помогло, используйте b foo в gdb, а затем пошагово и / или продолжайте как обычно и дождитесь его остановки в foo.
0 голосов
/ 17 февраля 2011

Попробуйте скомпилировать разделяемую библиотеку с флагами отладок.

...