【发布时间】:2011-06-29 00:03:41
【问题描述】:
我在 cygwin 主机上交叉编译了一个针对 linux 的应用程序。该程序在目标和 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 hello.
【问题讨论】:
-
虽然它不应该崩溃,但您必须使用 -g 标志进行编译才能进行合理的调试 - 这有什么不同吗?
-
我用-g编译。忘了说。
标签: c gdb shared-libraries remote-debugging gdbserver