gdb: список с практическими рекомендациями открытые файлы

Я задаюсь вопросом, могло ли быть возможно получить список файлов/каталогов, которые отлаженное приложение открыло, но не закрыло от самого GDB?

В настоящее время я устанавливал точку останова, и затем я использую внешнюю программу как lsof проверять на открытые файлы.

Но этот подход является действительно раздражающим.

Среда: Debian-Lenny с gdb v6.8

Править: Я спрашиваю, потому что мое приложение пропускает дескрипторы файлов в некоторых ситуациях

16
задан 9 February 2010 в 18:37
поделиться

3 ответа

Благодаря помощи Николая я смог полностью автоматизировать задачу, определив макрос.

.gdbinit:

define lsof
  shell rm -f pidfile
  set logging file pidfile
  set logging on
  info proc
  set logging off
  shell lsof -p `cat pidfile | perl -n -e 'print $1 if /process (.+)/'`
end

document lsof
  List open files
end

вот сессия с использованием нового макроса (программа открывает файл в каталоге /tmp):

file hello    
break main
run
next
lsof

output:

...
hello   2683  voku    5r   REG    8,1    37357 11110 /home/voku/hello
hello   2683  voku    6w   REG    8,1        0  3358 /tmp/testfile.txt
...
7
ответ дан 30 November 2019 в 21:10
поделиться

В Linux вы также можете просто посмотреть в / proc / / fd . Сделать это из GDB (например, если вы хотите прикрепить его к точке останова) довольно просто. Или, конечно, вы также можете просто использовать lsof.

(gdb) info proc
process 5262
cmdline = '/bin/ls'
cwd = '/afs/acm.uiuc.edu/user/njriley'
exe = '/bin/ls'
(gdb) shell ls -l /proc/5262/fd
total 0
lrwx------ 1 njriley users 64 Feb  9 12:45 0 -> /dev/pts/14
lrwx------ 1 njriley users 64 Feb  9 12:45 1 -> /dev/pts/14
lrwx------ 1 njriley users 64 Feb  9 12:45 2 -> /dev/pts/14
lr-x------ 1 njriley users 64 Feb  9 12:45 3 -> pipe:[62083274]
l-wx------ 1 njriley users 64 Feb  9 12:45 4 -> pipe:[62083274]
lr-x------ 1 njriley users 64 Feb  9 12:45 5 -> /bin/ls
(gdb) shell lsof -p 5262
COMMAND  PID    USER   FD   TYPE DEVICE    SIZE     NODE NAME
ls      5262 njriley  cwd    DIR   0,18   14336   262358 /afs/acm.uiuc.edu/user/njriley
ls      5262 njriley  rtd    DIR    8,5    4096        2 /
ls      5262 njriley  txt    REG    8,5   92312     8255 /bin/ls
ls      5262 njriley  mem    REG    8,5   14744   441594 /lib/libattr.so.1.1.0
ls      5262 njriley  mem    REG    8,5    9680   450321 /lib/i686/cmov/libdl-2.7.so
ls      5262 njriley  mem    REG    8,5  116414   450307 /lib/i686/cmov/libpthread-2.7.so
ls      5262 njriley  mem    REG    8,5 1413540   450331 /lib/i686/cmov/libc-2.7.so
ls      5262 njriley  mem    REG    8,5   24800   441511 /lib/libacl.so.1.1.0
ls      5262 njriley  mem    REG    8,5   95964   441580 /lib/libselinux.so.1
ls      5262 njriley  mem    REG    8,5   30624   450337 /lib/i686/cmov/librt-2.7.so
ls      5262 njriley  mem    REG    8,5  113248   441966 /lib/ld-2.7.so
ls      5262 njriley    0u   CHR 136,14               16 /dev/pts/14
ls      5262 njriley    1u   CHR 136,14               16 /dev/pts/14
ls      5262 njriley    2u   CHR 136,14               16 /dev/pts/14
ls      5262 njriley    3r  FIFO    0,6         62083274 pipe
ls      5262 njriley    4w  FIFO    0,6         62083274 pipe
ls      5262 njriley    5r   REG    8,5   92312     8255 /bin/ls
21
ответ дан 30 November 2019 в 21:10
поделиться

Я не уверен, что это решит вашу проблему, поскольку я не знаю, откуда она исходит, но когда я импортирую проект, я иду Файл - > Импорт - > Существующие проекты в рабочую область. Может, это обойдет вашу проблему.

-121--648880-

Вам нужно показать диалог хода выполнения в самом начале вашего второго действия, а не первого. Также необходимо выполнить загрузку данных в AsyncTask.

Смотрите мой ответ на этот вопрос для получения дополнительной информации:

Android SplashScreen

-121--3006981-

Нет, но можно запустить lsof и выполнить фильтрацию до отладочного процесса.

0
ответ дан 30 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: