Vim -p: Зловив смертельний сигнал SEGV?


12

Цю проблему я отримую, коли запускаю Vim з -pопцією. Припустимо, я почав з

vim -p first.txt second.txt

Потім після редагування first.txtпереходжу до second.txtвикористання gt. Я натискаю клавіші ggі Gзнову. Це призводить до помилки

Vim: Caught deadly signal SEGV

З цього моменту Vim не реагує на жоден сигнал, у тому числі Ctrl D. Я можу закрити цей сеанс лише вбивши термінал.

Ця проблема виникає лише тоді, коли я викликаю Vim з -pопцією. Якщо я відкриваю first.txtспочатку, а потім використовую :tabeдля відкриття second.txt, ця проблема не виникає.

Будь-які ідеї, чому це може статися?


Вихід vim --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan  2 2014 19:40:46)
Included patches: 1-52
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by buildd@
Huge version with GTK2-GNOME GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
+balloon_eval    +float           +mouse_urxvt     -tag_any_white
+browse          +folding         +mouse_xterm     +tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
+clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      +toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      +X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           +xsmp_interact
+eval            +mouse_dec       +startuptime     +xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    +xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz   -pthread -DORBIT2=1 -D_REENTRANT -I/usr/include/libgnomeui-2.0 -I/usr/include/libart-2.0 -I/usr/include/gconf/2 -I/usr/include/gnome-keyring-1 -I/usr/include/libgnome-2.0 -I/usr/include/libbonoboui-2.0 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/i386-linux-gnu/gnome-vfs-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/orbit-2.0 -I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/libxml2 -I/usr/include/pango-1.0 -I/usr/include/gail-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/atk-1.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/cairo -I/usr/include/gio-unix-2.0/ -I/usr/include/pixman-1 -I/usr/include/libpng12     -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1     -I/usr/include/tcl8.6  -D_REENTRANT=1  -D_THREAD_SAFE=1  -D_LARGEFILE64_SOURCE=1  
Linking: gcc   -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -rdynamic -Wl,-export-dynamic -Wl,-E  -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype     -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lORBit-2 -lart_lgpl_2 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lfreetype -lgconf-2 -lgthread-2.0 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0   -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo -lnsl  -lselinux  -lacl -lattr -lgpm -ldl  -L/usr/lib -llua5.2 -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.18/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python2.7/config-i386-linux-gnu -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions  -L/usr/lib/i386-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lieee -lm -lruby-1.9.1 -lpthread -lrt -ldl -lcrypt -lm  -L/usr/lib   

Вихід uname -a:

Linux nitish 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:37:48 UTC 2015 i686 i686 i686 GNU/Linux

На підставі коментарів @Carpetsmoker я з’ясував, що проблема в моєму .vimrcфайлі. Тож я перевірив, запускав проблему, що викликає команду, з .vimrcкоментованими частинами файлу. Нарешті я з’ясував, що проблема в лінії

set columns=1000

Як така невинна команда може викликати цю проблему? :help columnsне дав корисної інформації з цього приводу.


2
який vim (та рівень патчу) ви використовуєте? (наприклад, вихід vver - перетворення), а яка ОС? Незалежно від цього, було б корисно оновити vim. Якщо ви перебуваєте на Mac і використовуєте плагіни ruby ​​(наприклад, command-T), ви можете перевстановити їх та / або переконатися, що vim використовує системний ruby, а не ruby ​​rby (що, здається, спричинило проблеми для деяких людей)
davidlowryduda

1
Ви можете запустити vim як vim -u NONE -p first.txt second.txt... Це запобіжить завантаження файлу vimrc.
Мартін Турноїй

@hatter Vim був встановлений чи скомпільований? Чи можете ви оновити його до 7.4 і побачити, чи це допомагає.
kenorb

@kenorb Vim було встановлено.
nitishch

@Carpetsmoker Це працювало !! Це остаточно вказує на наявність проблеми у .vimrcфайлі?
nitishch

Відповіді:


6

Сигнал SEGV, також відомий як segfault, майже завжди пояснюється помилкою в запущеній програмі - у цьому випадку vim. (Інші причини - такі, як несправне обладнання, або колись у синій місяць, помилки ядра).

Тож справді потрібно повідомити про помилку. :help bug-reportsнадає інструкції щодо повідомлення про помилку. Здається, у вас вже є мінімальний набір кроків, щоб відтворити проблему, тож це більша частина роботи. Вам, мабуть, слід спробувати спочатку нову версію Vim, лише щоб переконатися, що вона ще не була виправлена.


Я використовую Vim 7.4. Офіційний веб-сайт говорить, що це остання версія.
nitishch

@hatter у вас застосовано менше патчів, ніж доступно.
дероберт

Він працює під Debian, і це пояснює, що :-)
Мартін Турной

@Carpetsmoker Я запускаю Debian і проходжу патч 488 ... Я не впевнений, чому ОП старіше. У Wheezy (поточний реліз) 7,3, тому ОП це не використовує. Нестабільні, Jessie та Wheezy-Backports мають 7,4 патча 488. (Враховуючи, що 640 є поточним, тому це ще дещо старе.)
derobert

3

Якщо ваш vim виходить з ладу через помилку сегментації , це вказує на порушення доступу до пам’яті, яке викликано помилками програмного забезпечення або обладнанням.

Якщо це відбувається повторно, вам слід зробити так:

  1. Вимкніть плагіни запуском: vim -u NONEі подивіться, чи це допомагає.
  2. Оновіть vim до останньої стабільної версії.
  3. Оновіть vim до останньої версії розробки.
  4. Необов’язково двічі перевірити одну і ту ж версію vim на різних машинах (можливо, це викликано проблемами з обладнанням).
  5. Спробуйте запустити vimпід налагоджувачем, наприклад: gdb vimі перевірте наявність зворотного сліду (після SEGV, в gdb: type btабо bt full).
  6. Якщо backtrace не містить символів, вам слід перекомпілювати свій vim, щоб включити його.
  7. Якщо ви завершили зворотний трек, перевірте наявність подібних проблем або повідомте про нову помилку у програмі відстеження помилок vim (для звичайного vim) або перевірте :help bugs. Якщо ви маєте іншу версію vim (наприклад, gVim, MacVim, NeoVim), повідомте про це правильному технічному обслуговувачу.

2
Це відбувається лише в моїй системі. Не буває з -u NONE. Здається , що лінія set columns=1000в .vimrcвинуватця.
nitishch

0

Несправності сегментації можуть також бути підключені до взаємодіючих серверів, таких як netbeans, і того, autocmdщо недійсний буфер (наприклад, BufNewFileоперації), який інша програма (плагін, ...) очікує (або подібне) у .vimконфігурації, спробуйте прокоментувати ці рядки, наприклад у .vimrc.

Типове повідомлення про помилку:

missing ! or / in <number>:<command>

де commandможе бути напрeditFile

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.