เสียงเรียกเข้า: จับสัญญาณร้ายแรงถึง SEGV ได้ไหม


12

ฉันพบปัญหานี้เมื่อเริ่มใช้ Vim ด้วย-pตัวเลือก สมมติว่าฉันเริ่มต้นด้วย

vim -p first.txt second.txt

แล้วหลังจากที่การแก้ไขfirst.txtผมย้ายไปใช้second.txt gtฉันกดปุ่มggและGอีกครั้ง สิ่งนี้ทำให้เกิดข้อผิดพลาด

Vim: Caught deadly signal SEGV

จากจุดนี้เป็นกลุ่มไม่ตอบสนองต่อสัญญาณใด ๆ Ctrl Dรวมทั้ง ฉันสามารถปิดเซสชั่นนี้โดยการฆ่า terminal

ปัญหานี้เกิดขึ้นเฉพาะเมื่อฉันเรียกใช้ 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 (และระดับแพทช์) อันไหน (เช่นเสียงเรียกเข้า --version output) และ OS ใด? เป็นความคิดที่ดีที่จะอัพเดทกลุ่ม หากคุณใช้ Mac และใช้ ruby ​​plugin (เช่น command-T) คุณอาจติดตั้งใหม่และ / หรือตรวจสอบให้แน่ใจว่า vim ใช้ระบบ ruby ​​และไม่ใช่ rvm ruby ​​(ซึ่งดูเหมือนว่าจะทำให้เกิดปัญหากับบางคน)
davidlowryduda

1
คุณสามารถเริ่ม vim เป็นvim -u NONE -p first.txt second.txt... ซึ่งจะป้องกันการโหลดไฟล์ vimrc ของคุณ
Martin Tournoij

@hatter เสียงเรียกเข้านั้นถูกติดตั้งหรือเรียบเรียง? คุณสามารถอัพเกรดเป็น 7.4 และดูว่ามีประโยชน์หรือไม่
kenorb

ติดตั้ง @kenorb Vim แล้ว
nitishch

@Carpetsmoker มันทำงาน !! นี่ชี้ให้เห็นอย่างชัดเจนว่ามีปัญหาใน.vimrcไฟล์หรือไม่?
nitishch

คำตอบ:


6

สัญญาณ SEGV หรือที่รู้จักกันในชื่อ segfault นั้นมักจะเกิดจากบั๊กในโปรแกรมที่คุณกำลังใช้งานอยู่ - ในกรณีนี้คือ vim (สาเหตุอื่นคือสิ่งต่าง ๆ เช่นฮาร์ดแวร์ที่มีข้อบกพร่องหรือครั้งเดียวในดวงจันทร์สีน้ำเงินข้อบกพร่องเคอร์เนล)

ดังนั้นคุณต้องรายงานข้อผิดพลาด :help bug-reportsให้คำแนะนำเกี่ยวกับวิธีการรายงานข้อบกพร่อง ดูเหมือนว่าคุณมีขั้นตอนขั้นต่ำในการทำให้เกิดปัญหาอีกครั้งดังนั้นนั่นจึงเป็นงานส่วนใหญ่ที่นั่น คุณควรทดสอบ Vim เวอร์ชันที่ใหม่กว่าก่อนเพื่อให้แน่ใจว่ายังไม่ได้รับการแก้ไข


ฉันใช้ Vim 7.4 เว็บไซต์ทางการบอกว่านี่เป็นเวอร์ชั่นล่าสุด
nitishch

@ แฮทที่คุณมีแพตช์ที่ใช้น้อยกว่าที่มีอยู่
Derobert

เขาใช้ Debian ดังนั้นจึงอธิบายได้ว่า :-)
Martin Tournoij

@Carpetsmoker ฉันใช้ Debian และมีการแก้ไข 488 ... ฉันไม่แน่ใจว่าทำไม OP ถึงเก่ากว่า เสียงฮืด ๆ (รีลีสปัจจุบัน) มี 7.3 ดังนั้น OP จึงไม่ได้ใช้มัน เจสซีและ Wheezy-Backport ไม่แน่นอนทั้งหมดมีแพทช์ 7.4 488 (ให้ไว้ 640 ปัจจุบันดังนั้นจึงยังค่อนข้างเก่า)
derobert

3

หากเป็นกลุ่มของคุณล้มเหลวเนื่องจากความผิดพลาดของการแบ่งส่วนที่บ่งบอกถึงการละเมิดการเข้าถึงหน่วยความจำซึ่งเกิดจากทั้งปัญหาซอฟต์แวร์หรือปัญหาฮาร์ดแวร์

หากสิ่งนี้เกิดขึ้นซ้ำ ๆ คุณควรทำตามลำดับดังนี้:

  1. ปิดใช้งานปลั๊กอินโดยเรียกใช้: vim -u NONEและดูว่ามีประโยชน์หรือไม่
  2. อัพเกรดเสียงเรียกเข้าของคุณให้เป็นเวอร์ชั่นล่าสุดที่เสถียร
  3. อัพเกรดเป็นกลุ่มของคุณเป็นรุ่นพัฒนาล่าสุด
  4. เลือกที่จะตรวจสอบเวอร์ชัน vim เดียวกันบนเครื่องที่แตกต่างกัน (อาจเกิดจากปัญหาฮาร์ดแวร์)
  5. ลองเรียกใช้vimภายใต้ดีบักเกอร์เช่น: gdb vimและตรวจสอบ backtrace (หลังจาก SEGV, in gdb: type btor bt full)
  6. หาก backtrace ไม่มีสัญลักษณ์คุณต้องคอมไพล์ vim ของคุณเพื่อรวมสิ่งเหล่านี้
  7. หากคุณได้ติดตามย้อนหลังที่สมบูรณ์กรุณาตรวจสอบปัญหาที่คล้ายกันหรือรายงานข้อบกพร่องใหม่ในการติดตามข้อผิดพลาดที่เป็นกลุ่มของ (สำหรับกลุ่มธรรมดา) :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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.