Я воспроизвел это поведение, используя текущую магистральную GDB.
Я считаю, что это ошибка: документация говорит:
"When you use attach, the debugger finds the program running in the process
first by looking in the current working directory, then (if the program
is not found) ..."
Он не различаетпервое и второе присоединение, и это не говорит о том, что GDB не найдет программу снова, если новый процесс запускает программу, отличную от старой.
Вы можете обойти это с помощью команды file
:
(gdb) attach $PID1
...
(gdb) detach
(gdb) file prog2 # you shouldn't have to do this
(gdb) attach $PID2 # works fine