Предположим, что это исходный файл C с именем file.c
.
Использованиеctags
:
$ ctags file.c
Это создает файл с именемtags
:
$ cat tags
init_DB file.c /^init_DB(DB *database, char *params[])$/
load_DB file.c /^FILE * load_DB(const char * exppath, const char * /
prep_DB file.c /^prep_DB() {$/
Может использоваться с vi
или vim
для автоматического перехода к определениям функций.
Вы также можете разобрать этот файл с помощью cut
иgrep
:
$ cut -f 1 tags | grep '_DB$'
init_DB
load_DB
prep_DB
В системах Ubuntu установка ctags
фактически приведет к установке exuberant-ctags
, что обеспечивает более подробный tags
вывод:
$ cat tags
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
init_DB file.c /^init_DB(DB *database, char *params[])$/;" f
load_DB file.c /^FILE * load_DB(const char * exppath, const char * expfname)$/;" f
prep_DB file.c /^prep_DB() {$/;" f
Здесь мы можем быть уверены, что получим определения функций только с помощью
$ awk '$NF == "f" && $1 ~ /_DB$/ { print $1 }' tags
init_DB
load_DB
prep_DB
Дело в том, что лучше использовать специализированный синтаксический анализатор языка C, чем пытаться учитывать все возможные стили программирования в awk
скрипте или регулярном выражении с grep
, который анализирует код C.
Вы также можете
$ ctags -x file.c
init_DB function 3 file.c init_DB(DB *database, char *params[])
load_DB function 12 file.c FILE * load_DB(const char * exppath, const char * expfname)
prep_DB function 8 file.c prep_DB() {
, а затем проанализируйте/отфильтруйте его так, как вам нужно. Номер — это номер строки определения. Все сводится к тому, что вы подразумеваете под «хочу найти».
У меня точно такая же проблема. Это произошло вчера, в тот же момент, что и вы, и я думаю, что это плохое обновление gmd3 (Gnome Display Manager 3 ), потому что я перезагрузил свой компьютер до отчаяния и установил Kali Linux. Когда я перезагружаю свой компьютер после обновления, он делает точно такую же ошибку. Я думаю, что стоит дождаться нового обновления, которое починит Gnome, и сделать
sudo apt-get update;sudo apt-get upgrade;sudo apt autoremove;reboot
, когда новое обновление доступно в режиме восстановления. Это мое мнение, но я действительно не знаю, что происходит.
Я сделал
sudo apt-get update;sudo apt-get upgrade
сегодня, и он обновил gdm3, но все исправил:(
Я пытаюсь установить другую среду рабочего стола, но не могу. Так что я просто использую Windows 10, жду обновления.
Не думаю, что кому-то помог, но хочу поделиться своей ситуацией. Извините за мой базовый английский, я не носитель языка. (Я иногда пользуюсь переводчиком )(Гугл лол)
Итак, если у кого-то есть идея быстрее, чем Offencive Security (разработчик Kali ), пожалуйста, сообщите нам решение. Спасибо
В настоящее время это ошибка Gnome.
Установите lightdm с apt install lightdm
как , предложенный администраторами kali .
Я только что понял, что у меня та же проблема. Не уверен, почему это произошло, так как я только что исправил, но, похоже, в моем случае это проблема с нехваткой места в разделах моего жесткого диска. При установке linux (kali )я разделил жесткий диск на разделы для каждой отдельной папки, (поэтому /root имел свой собственный раздел, а /usr и т. д. )не рекомендуется. поэтому, чтобы решить эту проблему, я зашел в виртуальную консоль (Режим восстановления )и запустил:
sudo apt -получить автоочистку
sudo apt -получить автоматическое удаление
и это сработало! Надеюсь, это поможет
Возможно, хранилище вашего раздела kali заполнено, вам следует загрузиться с live kali usb, а затем изменить его размер с помощью gparted.
Я нашел хорошее решение этой проблемы.
Просто нажмите ALTF2 , прежде чем процесс загрузки завершится и застрянет с «запущенным GNOME Display Manager».
Если вы попытаетесь переключить терминал после завершения процесса загрузки, то уже слишком поздно и ничего не происходит.