通常当使用gdb时,我可以停止执行并重建可执行文件并重新启动而不会丢失我的断点。当我尝试使用具有静态链接库的可执行文件时,出现错误,指出在构建过程中无法打开可执行文件。GDB可以使用静态链接库重新加载可执行文件吗?
一个具体的例子:
的库文件:
libtest.h:
int square(int a);
libtest.c:
int square(int a) {
return a * a;
}
该库编译:
gcc -g -c libfile.c
ar rcs libtest.a libfile.o
主文件AC包含:
#include <stdio.h>
#include <stdlib.h>
#include "libfile.h"
int main() {
printf("2 squared is %d\n", square(2));
return 0;
}
该项目是编译和链接如下:
gcc -g -c a.c
gcc a.o -g --static -L. -ltest -o gdb_test
如果我加载生成的文件gdb_test到GDB它并不重要,如果它正在运行它不是。只要gdb打开,后续的构建将在链接步骤中失败:
/usr/bin/ld: cannot open output file gdb_test: Permission denied
有没有办法解决这个问题?我希望能够使用gdb而不必重新启动并释放断点。
你可能是对的。我使用Ubuntu 10.04和2.6.32-37内核。 GCC为v4.4.3,GDB为v7.1。我想我会等到12月4日的4月份。 – Kenneth 2011-12-28 11:54:03
您可以升级到Ubuntu 11.04,或切换到Linux mint 12,或者花时间重新编译binutils,gdb,gcc(从他们最近的源代码中)。我不认为这是一个内核问题(但我可能是错的)。 – 2011-12-28 11:57:10
@Kenneth:似乎在Ubuntu 10.04.3 2.6.32-37-generic,gcc Ubuntu 4.4.3-4ubuntu5,gdb 7上工作。1-ubuntu,libc Ubuntu EGLIBC 2.11.1-0ubuntu7.8。使用'lsof'检查是否有任何其他进程持有gdb_test – 2011-12-28 13:20:16