我在cygwin主机上交叉编译了一个linux目标应用程序。该程序可以在目标上运行,也可以在gdbserver上运行。但是,当我尝试逐步浏览程序时,每次进入共享库函数时都会崩溃。回溯GDB打印是: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的未知-Linux的GNU的gcc的-g -c hello.c的编译。
和foo.c的:
void foo(int *i)
{
*i = 2;
}
与 x86_64的未知-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你好。
虽然它不应该崩溃,但您必须使用-g标志进行编译才能进行合理的调试 - 这是否有所作为? – nos 2011-02-17 10:35:04
我用-g编译。忘了提及。 – 2011-02-17 10:53:25