GDB присоединяется к процессу, где удаляется исполняемый файл - PullRequest
5 голосов
/ 02 апреля 2012

У меня запущен процесс, но его исполняемый файл удален. Если я пытаюсь подключить GDB, я получаю следующую ошибку

/home/vivek/binary/releases/20120328101511/bin/app.exe (deleted): No such file or directory.

Как я могу прикрепить GDB к этому процессу?

Пример теста: Исходный код:

#include<stdio.h>
#include<stdlib.h>
int main(){
  for (;;){
    printf("Sleeping");
    sleep(1);
  }
}

скомпилируйте

 gcc main.cc -o a.out
 gcc main.cc -o b.out

Run ./a.out

Теперь из другого терминала удалите a.out. И огонь GDB прикрепить pgrep a.out файл b.out Это не работает.

GDB показывает следующую ошибку:

/tmp/temp/a.out (deleted): No such file or directory.
A program is being debugged already.  Kill it? (y or n) n
Program not killed.

Ответы [ 2 ]

7 голосов
/ 02 апреля 2012

Попробуйте использовать /proc/<pid>/exe в качестве исполняемого файла.В наши дни он выглядит как символическая ссылка, однако в прошлом было возможно извлечь из него удаленный исполняемый файл.

См. Обнаружение удаленных исполняемых файлов .

Мы можемиспользуйте следующую команду, чтобы прикрепить gdb

gdb <path-to-binary> <pid>
2 голосов
/ 02 апреля 2012

Вы не можете. GDB нужны данные символов, которые находятся в исполняемом файле и не загружаются ОС при запуске программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...