Vim -p: Złapany śmiertelny sygnał SEGV?


12

Ten problem pojawia się, gdy uruchamiam Vima z -popcją. Załóżmy, że zacząłem od

vim -p first.txt second.txt

Następnie po edycji first.txtprzechodzę do second.txtużywania gt. Naciskam klawisze ggi Gjeszcze raz. To powoduje błąd

Vim: Caught deadly signal SEGV

Od tego momentu Vim nie reaguje na żaden sygnał, w tym Ctrl D. Mogę zamknąć tę sesję tylko zabijając terminal.

Ten problem pojawia się tylko wtedy, gdy wywołuję Vima z -popcją. Jeśli first.txtnajpierw otworzę, a następnie użyję :tabedo otwarcia second.txt, ten problem się nie pojawi.

Wszelkie pomysły, dlaczego tak się dzieje?


Wyjście 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   

Wyjście 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

Na podstawie komentarzy @Carpetsmoker dowiedziałem się, że przyczyną problemu jest mój .vimrcplik. Więc sprawdziłem, czy uruchomiłem problem powodujący polecenie z .vimrckomentarzem niektórych części pliku. W końcu dowiedziałem się, że problem dotyczy linii

set columns=1000

W jaki sposób tak niewinne polecenie może powodować ten problem? :help columnsnie podał żadnych użytecznych informacji na ten temat.


2
jakiego vima (i poziomu łaty) używasz? (np. vim --version output) i jaki system operacyjny? Niezależnie od tego, dobrym pomysłem byłoby zaktualizowanie vima. Jeśli korzystasz z komputera Mac i używasz wtyczek ruby ​​(takich jak Command-T), możesz je ponownie zainstalować i / lub upewnić się, że vim używa ruby ​​systemowego, a nie rvm ruby ​​(co wydaje się powodować problemy u niektórych osób)
davidlowryduda

1
Możesz uruchomić vim jako vim -u NONE -p first.txt second.txt... Zapobiegnie to ładowaniu pliku vimrc.
Martin Tournoij,

@hat Vim został zainstalowany lub skompilowany? Czy możesz go uaktualnić do wersji 7.4 i sprawdzić, czy to pomoże.
kenorb

@kenorb Vim został zainstalowany.
nitishch

@Carpetsmoker Udało się !! Czy to definitywnie wskazuje, że w .vimrcpliku występuje problem ?
nitishch

Odpowiedzi:


6

Sygnał SEGV, znany również jako segfault, prawie zawsze wynika z błędu w uruchomionym programie - w tym przypadku vim. (Innymi przyczynami są np. Wadliwy sprzęt lub błąd niebieskiego księżyca).

Naprawdę musisz zgłosić błąd. :help bug-reportszawiera instrukcje dotyczące zgłaszania błędu. Wygląda na to, że masz już minimalną liczbę kroków do odtworzenia problemu, więc to większość pracy. Prawdopodobnie powinieneś najpierw przetestować nowszą wersję Vima, aby upewnić się, że nie została już naprawiona.


Używam Vima 7.4. Oficjalna strona internetowa twierdzi, że jest to najnowsza wersja.
nitishch

@ co masz mniej zastosowanych łat niż jest dostępnych.
derobert

Prowadzi Debiana, więc to wyjaśnia :-)
Martin Tournoij

@Carpetsmoker Używam Debiana i mam łatkę 488 ... Nie jestem pewien, dlaczego OP ma starsze wersje. Wheezy (bieżąca wersja) ma 7.3, więc OP go nie używa. Niestabilne, Jessie i Wheezy-Backports mają łatkę 7.48.48. (Biorąc pod uwagę, 640 jest aktualny, więc wciąż jest nieco stary).
derobert

3

Jeśli vim ulega awarii z powodu błędu segmentacji , oznacza to naruszenie dostępu do pamięci, które jest spowodowane błędem oprogramowania lub problemami sprzętowymi.

Jeśli zdarza się to wielokrotnie, wykonaj następujące czynności:

  1. Wyłącz wtyczki, uruchamiając: vim -u NONEi sprawdź, czy to pomoże.
  2. Zaktualizuj vima do najnowszej stabilnej wersji.
  3. Zaktualizuj vima do najnowszej wersji programistycznej.
  4. Opcjonalnie sprawdź dwukrotnie tę samą wersję vima na innym komputerze (być może jest to spowodowane problemami sprzętowymi).
  5. Spróbuj uruchomić vimw debuggerze, np .: gdb vimi sprawdź ślad (po SEGV, w gdb: wpisz btlub bt full).
  6. Jeśli ślad nie ma symboli, musisz ponownie skompilować vima, aby je uwzględnić.
  7. Jeśli ukończyłeś śledzenie, sprawdź podobne problemy lub zgłoś nowy błąd w narzędziu do śledzenia błędów vima (dla zwykłego vima) lub sprawdź :help bugs. Jeśli masz inną wersję vima (np. GVim, MacVim, NeoVim), zgłoś to odpowiednim opiekunom.

2
Dzieje się tak tylko w moim systemie. Nie dzieje się z -u NONE. Wydaje się, że linia set columns=1000w .vimrcjest winowajcą.
nitishch

0

Błędy segmentacji mogą być również powiązane z interakcyjnymi serwerami, takimi jak netbeans, i autocmdktóry unieważnia bufor (np. BufNewFileOperacje), którego inny program (wtyczka, ...) oczekuje (lub podobny) w .vimkonfiguracji, spróbuj skomentować te wiersze np .vimrc.

Typowy komunikat o błędzie to:

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

gdzie commandmoże być npeditFile

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.