Обычно при использовании 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
Основной файл a.c содержит:
#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 без перезапуска и потери точек останова.