C gdb远程调试-程序在进入共享库时崩溃

C gdb远程调试-程序在进入共享库时崩溃,c,gdb,shared-libraries,remote-debugging,gdbserver,C,Gdb,Shared Libraries,Remote Debugging,Gdbserver,我在cygwin主机上交叉编译了一个针对linux的应用程序。该程序在目标机上运行正常,也在gdbserver上运行。然而,当我尝试单步执行程序时,每当我进入共享库函数时,它就会崩溃。回溯gdb打印为: (gdb)bt #0 0x00000000004008f4英寸??() #1 0x0000003f0380d7e4英寸??() #2 0x00002b1373630000英寸??() #3 0x00002B137330590英寸??() #4 0x00002b1373631348英寸?

我在cygwin主机上交叉编译了一个针对linux的应用程序。该程序在目标机上运行正常,也在gdbserver上运行。然而,当我尝试单步执行程序时,每当我进入共享库函数时,它就会崩溃。回溯gdb打印为:

(gdb)bt

#0 0x00000000004008f4英寸??()

#1 0x0000003f0380d7e4英寸??()

#2 0x00002b1373630000英寸??()

#3 0x00002B137330590英寸??()

#4 0x00002b1373631348英寸??()

#5 0x00002b1373631888英寸??()

#6 0x0000003f03a1c510英寸??()

#7 0x0000000000000000英寸??()

如果我在函数上设置断点并继续,它不会崩溃

我是你好

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 hello.

尝试使用debugs标志编译共享库。

我也看到过这种情况,尽管在您的示例中它似乎不可复制(同样,我没有交叉编译)。然而,处理这种情况的提示

  • 当然,首先,建议使用
    -O0-ggdb3
    (不仅仅是-g)进行编译
  • 使用
    LD\u BIND\u NOW=1 gdb hello
    禁用这种延迟解析
  • 如果没有帮助,请在gdb中使用
    bfoo
    ,然后单步执行和/或像往常一样继续,等待它在foo中停止

虽然它不应该崩溃,但您必须使用-g标志进行编译才能进行合理的调试-这有什么区别吗?我使用-g进行编译。忘了提了。我确实用-g编译了它。我还需要添加什么吗?不,我的意思是:使用-gdb选项将共享库与exec链接。另外,共享库也应该使用-ggdb进行编译。因此,您将拥有libfoodb。因此,您必须下载该库的dbg版本。或者自己用gcc-shared-ggdbs来编译,谢谢,但是没有帮助。同样的结果。谢谢,但这些都没有帮助(除了使用“b foo”然后继续使用,这一直有效)