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

我在cygwin主机上交叉编译了一个linux目标应用程序。该程序在目标和gdbserver上运行正常。但是,当我尝试单步执行程序时,每当我进入共享库函数时它就会崩溃。 backtrace 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 hello。     
已邀请:
我也看到过这样的情况,虽然它似乎与你的例子不可重复(然后再次,我没有交叉编译)。然而,有关处理此类情况的提示...... 首先,建议使用
-O0 -ggdb3
(不仅仅是-g)进行编译。 使用
LD_BIND_NOW=1 gdb hello
禁用这种延迟分辨率。 如果这没有用,请在gdb中使用
b foo
然后单步执行和/或像往常一样继续并等待它在foo中停止。     
尝试使用调试标志编译共享库。     

要回复问题请先登录注册