通常當使用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