lsp + clangd 不定期卡死

最近尝试用 lsp-mode + clangd 补全 c++ 代码,体验很好。但是有个问题,就是 emacs 偶尔会卡死, 对鼠标键盘输入毫无响应。在用 lsp 之前没有出现过这种情况,所以我猜测是 lsp 的问题,QQ 群里有位道友表示他使用 lsp 补全 c++ 时也遇到过这个情况,但是在 lsp 的 issue 列表里找不到相关问题的报告。

遇到卡死,最开始我只能杀掉 emacs 进程,重新启动服务器。后来我偶然发现用 gdb attach 进服务器进程,简单捣鼓一下可以让 emacs 恢复正常(时灵时不灵)。加 -g 参数重新编译 emacs,卡死时再 attach ,能看到具体的调用栈信息(见文末)。就 gdb 报告的信息来看,emacs 貌似在无限等待 pselect 返回。因为我对 emacs 源码了解的不多,看不出具体问题在哪。

我想问下是否有更多的道友遇到过相同的问题?如果有,你们是怎么解决的?QQ群里的那位道友表示凡是需要补全的地方他都不用 emacs (啊这…)。

另外大家能否从 gdb 报出的信息看出具体问题在哪?

我用的系统是 ubuntu20.04. emacs 由自己从源码编译,版本号 26.3

clangd 版本号为 10.0.0-4ubuntu1. lsp 是前天从 melpa 安装的,应该是最新的。

(gdb) bt
#0  0x00007fc25da11246 in __pselect
    (nfds=24, readfds=0x7ffcd161b230, writefds=0x7ffcd161b2b0, exceptfds=0x0, timeout=<optimized out>, sigmask=<optimized out>) at ../sysdeps/unix/sysv/linux/pselect.c:48
#1  0x00000000005e0f50 in really_call_select (arg=0x7ffcd161b150) at ../../src/thread.c:572
#2  0x00000000005e1d4d in thread_select
    (func=<optimized out>, max_fds=max_fds@entry=24, rfds=rfds@entry=0x7ffcd161b230, wfds=wfds@entry=0x7ffcd161b2b0, efds=efds@entry=0x0, timeout=timeout@entry=0x7ffcd161b870, sigmask=0x0)
    at ../../src/thread.c:602
#3  0x0000000000600469 in xg_select
    (fds_lim=24, rfds=rfds@entry=0x7ffcd161b980, wfds=wfds@entry=0x7ffcd161ba00, efds=efds@entry=0x0, timeout=timeout@entry=0x7ffcd161b870, sigmask=sigmask@entry=0x0) at ../../src/xgselect.c:117
#4  0x00000000005c1ea0 in wait_reading_process_output
    (time_limit=<optimized out>, nsecs=<optimized out>, read_kbd=read_kbd@entry=-1, do_display=do_display@entry=true, wait_for_cell=wait_for_cell@entry=0, wait_proc=wait_proc@entry=0x0, just_wait_proc=0)
    at ../../src/process.c:5403
#5  0x000000000050a042 in kbd_buffer_get_event
    (end_time=0x7ffcd161c1b0, used_mouse_menu=0x0, kbp=<synthetic pointer>) at ../../src/lisp.h:855
#6  read_event_from_main_queue
    (used_mouse_menu=0x0, local_getcjmp=0x7ffcd161be70, end_time=0x7ffcd161c1b0)
    at ../../src/keyboard.c:2153
#7  read_decoded_event_from_main_queue
    (used_mouse_menu=<optimized out>, prev_event=<optimized out>, local_getcjmp=<optimized out>, end_time=<optimized out>) at ../../src/keyboard.c:2217
#8  read_char
    (commandflag=commandflag@entry=0, map=map@entry=0, prev_event=prev_event@entry=49824, used_mouse_menu=used_mouse_menu@entry=0x0, end_time=0x7ffcd161c1b0) at ../../src/keyboard.c:2808
--Type <RET> for more, q to quit, c to continue without paging-- 
#9  0x0000000000599ee4 in read_filtered_event
    (no_switch_frame=false, ascii_required=false, error_nonascii=false, input_method=<optimized out>, seconds=<optimized out>) at ../../src/lisp.h:855
#10 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd161c2b0)
    at ../../src/lisp.h:1862
#11 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=97862661, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821331176, args=<optimized out>, args@entry=0x7ffcd161c2b0)
    at ../../src/bytecode.c:630
#12 0x000000000057a2e1 in funcall_lambda (fun=140723821331354, nargs=140723821331176, 
    nargs@entry=5, arg_vector=0x7ffcd161c2b0, arg_vector@entry=0x7ffcd161c5d0) at ../../src/lisp.h:1614
#13 0x00000000005779bb in Ffuncall (nargs=6, args=args@entry=0x7ffcd161c5c8) at ../../src/eval.c:2787
#14 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=89397349, maxdepth=<optimized out>, args_template=args_template@entry=0, nargs=nargs@entry=0, args=<optimized out>, args@entry=0x0) at ../../src/bytecode.c:630
#15 0x000000000057a461 in funcall_lambda
    (fun=<optimized out>, nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7ffcd161c850)
    at ../../src/lisp.h:1614
#16 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd161c848) at ../../src/eval.c:2787
#17 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=97093909, maxdepth=<optimized out>, args_template=args_template@entry=0, nargs=nargs@entry=0, args=<optimized out>, args@entry=0x0) at ../../src/bytecode.c:630
#18 0x000000000057a461 in funcall_lambda
    (fun=<optimized out>, nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7ffcd161cab0)
    at ../../src/lisp.h:1614
#19 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd161caa8) at ../../src/eval.c:2787
--Type <RET> for more, q to quit, c to continue without paging--
#20 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=89405349, maxdepth=<optimized out>, args_template=args_template@entry=0, nargs=nargs@entry=0, args=<optimized out>, args@entry=0x0) at ../../src/bytecode.c:630
#21 0x000000000057a461 in funcall_lambda
    (fun=<optimized out>, nargs=nargs@entry=0, arg_vector=arg_vector@entry=0x7ffcd161cd10)
    at ../../src/lisp.h:1614
#22 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd161cd08) at ../../src/eval.c:2787
#23 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=89405541, maxdepth=<optimized out>, args_template=args_template@entry=0, nargs=nargs@entry=0, args=<optimized out>, args@entry=0x0) at ../../src/bytecode.c:630
#24 0x000000000057a461 in funcall_lambda
    (fun=<optimized out>, nargs=nargs@entry=2, arg_vector=arg_vector@entry=0x7ffcd161d050)
    at ../../src/lisp.h:1614
#25 0x00000000005779bb in Ffuncall (nargs=nargs@entry=3, args=args@entry=0x7ffcd161d048)
    at ../../src/eval.c:2787
#26 0x000000000057986b in Fapply (nargs=3, args=0x7ffcd161d048) at ../../src/eval.c:2350
#27 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd161d040)
    at ../../src/lisp.h:1862
#28 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=96037845, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821334624, args=<optimized out>, args@entry=0x7ffcd161d040)
    at ../../src/bytecode.c:630
#29 0x000000000057a2e1 in funcall_lambda (fun=140723821334629, nargs=140723821334624, 
    nargs@entry=1, arg_vector=0x7ffcd161d040, arg_vector@entry=0x7ffcd161d260) at ../../src/lisp.h:1614
#30 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd161d258) at ../../src/eval.c:2787
#31 0x00000000005b6a64 in exec_byte_code
--Type <RET> for more, q to quit, c to continue without paging--
    (bytestr=<optimized out>, vector=6953285, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821335168, args=<optimized out>, args@entry=0x7ffcd161d258)
    at ../../src/bytecode.c:630
#32 0x000000000057a2e1 in funcall_lambda (fun=140723821335300, nargs=140723821335168, 
    nargs@entry=1, arg_vector=0x7ffcd161d258, arg_vector@entry=0x7ffcd161d5b0) at ../../src/lisp.h:1614
#33 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd161d5a8) at ../../src/eval.c:2787
#34 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=111407221, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821336032, args=<optimized out>, args@entry=0x7ffcd161d5a8)
    at ../../src/bytecode.c:630
#35 0x000000000057a2e1 in funcall_lambda (fun=140723821336097, nargs=140723821336032, 
    nargs@entry=1, arg_vector=0x7ffcd161d5a8, arg_vector@entry=0x7ffcd161d890) at ../../src/lisp.h:1614
#36 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd161d888) at ../../src/eval.c:2787
#37 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=103135125, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821336800, args=<optimized out>, args@entry=0x7ffcd161d888)
    at ../../src/bytecode.c:630
#38 0x000000000057a2e1 in funcall_lambda (fun=140723821337145, nargs=140723821336800, 
    nargs@entry=3, arg_vector=0x7ffcd161d888, arg_vector@entry=0x7ffcd161dc18) at ../../src/lisp.h:1614
#39 0x00000000005779bb in Ffuncall (nargs=4, args=0x7ffcd161dc10) at ../../src/eval.c:2787
#40 0x0000000000579652 in Fapply (nargs=<optimized out>, args=0x7ffcd161dd18) at ../../src/eval.c:2393
#41 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd161dd10)
    at ../../src/lisp.h:1862
#42 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=118714773, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821337912, args=<optimized out>, args@entry=0x7ffcd161dd10)
--Type <RET> for more, q to quit, c to continue without paging--
    at ../../src/bytecode.c:630
#43 0x000000000057a2e1 in funcall_lambda (fun=140723821337919, nargs=140723821337912, 
    nargs@entry=2, arg_vector=0x7ffcd161dd10, arg_vector@entry=0x7ffcd161df18) at ../../src/lisp.h:1614
#44 0x00000000005779bb in Ffuncall (nargs=3, args=0x7ffcd161df10) at ../../src/eval.c:2787
#45 0x0000000000579652 in Fapply (nargs=nargs@entry=2, args=args@entry=0x7ffcd161dfc0)
    at ../../src/eval.c:2393
#46 0x000000000057997e in apply1 (fn=<optimized out>, arg=<optimized out>) at ../../src/lisp.h:1171
#47 0x0000000000576b9e in internal_condition_case_1
    (bfun=bfun@entry=0x5b9c40 <read_process_output_call>, arg=186216195, handlers=handlers@entry=21120, hfun=hfun@entry=0x5b9be0 <exec_sentinel_error_handler>) at ../../src/eval.c:1360
#48 0x00000000005b9b06 in exec_sentinel (proc=proc@entry=118395013, reason=126109220)
    at ../../src/lisp.h:1171
#49 0x00000000005bcb0a in status_notify
    (deleting_process=deleting_process@entry=0x0, wait_proc=wait_proc@entry=0x0)
    at ../../src/process.c:7315
#50 0x00000000005c2609 in wait_reading_process_output
    (time_limit=<optimized out>, nsecs=<optimized out>, read_kbd=read_kbd@entry=0, do_display=do_display@entry=false, wait_for_cell=wait_for_cell@entry=0, wait_proc=0x0, just_wait_proc=0)
    at ../../src/process.c:5231
#51 0x00000000005c3df4 in Faccept_process_output
    (process=0, seconds=<optimized out>, millisec=<optimized out>, just_this_one=0)
    at ../../src/lisp.h:855
#52 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd161e640)
    at ../../src/lisp.h:1862
#53 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=111153573, maxdepth=<optimized out>, args_template=<optimized out>, --Type <RET> for more, q to quit, c to continue without paging--
nargs=nargs@entry=140723821340312, args=<optimized out>, args@entry=0x7ffcd161e640)
    at ../../src/bytecode.c:630
#54 0x000000000057a2e1 in funcall_lambda (fun=140723821340390, nargs=140723821340312, 
    nargs@entry=2, arg_vector=0x7ffcd161e640, arg_vector@entry=0x7ffcd161e920) at ../../src/lisp.h:1614
#55 0x00000000005779bb in Ffuncall (nargs=3, args=args@entry=0x7ffcd161e918) at ../../src/eval.c:2787
#56 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=135680789, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821341064, args=<optimized out>, args@entry=0x7ffcd161e918)
    at ../../src/bytecode.c:630
#57 0x000000000057a2e1 in funcall_lambda (fun=140723821341159, nargs=140723821341064, 
    nargs@entry=0, arg_vector=0x7ffcd161e918, arg_vector@entry=0x7ffcd161ed18) at ../../src/lisp.h:1614
#58 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd161ed10) at ../../src/eval.c:2787
#59 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=214221413, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821341984, args=<optimized out>, args@entry=0x7ffcd161ed10)
    at ../../src/bytecode.c:630
#60 0x000000000057a2e1 in funcall_lambda (fun=140723821342021, nargs=140723821341984, 
    nargs@entry=3, arg_vector=0x7ffcd161ed10, arg_vector@entry=0x7ffcd161ef18) at ../../src/lisp.h:1614
#61 0x00000000005779bb in Ffuncall (nargs=nargs@entry=4, args=args@entry=0x7ffcd161ef10)
    at ../../src/eval.c:2787
#62 0x000000000057b018 in call3
    (fn=<optimized out>, arg1=<optimized out>, arg2=<optimized out>, arg3=<optimized out>)
    at ../../src/eval.c:2640
#63 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd161efb8)
    at ../../src/lisp.h:1862
#64 0x00000000005b6a64 in exec_byte_code
--Type <RET> for more, q to quit, c to continue without paging--
    (bytestr=<optimized out>, vector=7586717, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821342744, args=<optimized out>, args@entry=0x7ffcd161efb8)
    at ../../src/bytecode.c:630
#65 0x000000000057a2e1 in funcall_lambda (fun=140723821342758, nargs=140723821342744, 
    nargs@entry=4, arg_vector=0x7ffcd161efb8, arg_vector@entry=0x7ffcd161f298) at ../../src/lisp.h:1614
#66 0x00000000005779bb in Ffuncall (nargs=5, args=args@entry=0x7ffcd161f290) at ../../src/eval.c:2787
#67 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=7584813, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821343424, args=<optimized out>, args@entry=0x7ffcd161f290)
    at ../../src/bytecode.c:630
#68 0x000000000057a2e1 in funcall_lambda (fun=140723821343470, nargs=140723821343424, 
    nargs@entry=4, arg_vector=0x7ffcd161f290, arg_vector@entry=0x7ffcd161f4d8) at ../../src/lisp.h:1614
#69 0x00000000005779bb in Ffuncall (nargs=5, args=args@entry=0x7ffcd161f4d0) at ../../src/eval.c:2787
#70 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=215368917, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821343992, args=<optimized out>, args@entry=0x7ffcd161f4d0)
    at ../../src/bytecode.c:630
#71 0x000000000057a2e1 in funcall_lambda (fun=140723821344005, nargs=140723821343992, 
    nargs@entry=1, arg_vector=0x7ffcd161f4d0, arg_vector@entry=0x7ffcd161f700) at ../../src/lisp.h:1614
#72 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd161f6f8) at ../../src/eval.c:2787
#73 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=7559181, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821344528, args=<optimized out>, args@entry=0x7ffcd161f6f8)
    at ../../src/bytecode.c:630
#74 0x000000000057a2e1 in funcall_lambda (fun=140723821344550, nargs=140723821344528, 
    nargs@entry=2, arg_vector=0x7ffcd161f6f8, arg_vector@entry=0x7ffcd161f980) at ../../src/lisp.h:1614
--Type <RET> for more, q to quit, c to continue without paging--
#75 0x00000000005779bb in Ffuncall (nargs=3, args=args@entry=0x7ffcd161f978) at ../../src/eval.c:2787
#76 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=7567757, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821345232, args=<optimized out>, args@entry=0x7ffcd161f978)
    at ../../src/bytecode.c:630
#77 0x000000000057a2e1 in funcall_lambda (fun=140723821345354, nargs=140723821345232, 
    nargs@entry=6, arg_vector=0x7ffcd161f978, arg_vector@entry=0x7ffcd161fc68) at ../../src/lisp.h:1614
#78 0x00000000005779bb in Ffuncall (nargs=7, args=args@entry=0x7ffcd161fc60) at ../../src/eval.c:2787
#79 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=7568221, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821345944, args=<optimized out>, args@entry=0x7ffcd161fc60)
    at ../../src/bytecode.c:630
#80 0x000000000057a2e1 in funcall_lambda (fun=140723821345958, nargs=140723821345944, 
    nargs@entry=5, arg_vector=0x7ffcd161fc60, arg_vector@entry=0x7ffcd161fea8) at ../../src/lisp.h:1614
#81 0x00000000005779bb in Ffuncall (nargs=6, args=args@entry=0x7ffcd161fea0) at ../../src/eval.c:2787
#82 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=106613013, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821346560, args=<optimized out>, args@entry=0x7ffcd161fea0)
    at ../../src/bytecode.c:630
#83 0x000000000057a2e1 in funcall_lambda (fun=140723821346599, nargs=140723821346560, 
    nargs@entry=1, arg_vector=0x7ffcd161fea0, arg_vector@entry=0x7ffcd1620168) at ../../src/lisp.h:1614
#84 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd1620160) at ../../src/eval.c:2787
#85 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=102815429, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821347264, args=<optimized out>, args@entry=0x7ffcd1620160)
    at ../../src/bytecode.c:630
--Type <RET> for more, q to quit, c to continue without paging--
#86 0x000000000057a2e1 in funcall_lambda (fun=140723821347333, nargs=140723821347264, 
    nargs@entry=2, arg_vector=0x7ffcd1620160, arg_vector@entry=0x7ffcd16204e8) at ../../src/lisp.h:1614
#87 0x00000000005779bb in Ffuncall (nargs=3, args=0x7ffcd16204e0) at ../../src/eval.c:2787
#88 0x0000000000579652 in Fapply (nargs=<optimized out>, args=0x7ffcd16205d8) at ../../src/eval.c:2393
#89 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd16205d0)
    at ../../src/lisp.h:1862
#90 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=111267957, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821348352, args=<optimized out>, args@entry=0x7ffcd16205d0)
    at ../../src/bytecode.c:630
#91 0x000000000057a2e1 in funcall_lambda (fun=140723821348370, nargs=140723821348352, 
    nargs@entry=2, arg_vector=0x7ffcd16205d0, arg_vector@entry=0x7ffcd1620818) at ../../src/lisp.h:1614
#92 0x00000000005779bb in Ffuncall (nargs=3, args=args@entry=0x7ffcd1620810) at ../../src/eval.c:2787
#93 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=109665029, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821348952, args=<optimized out>, args@entry=0x7ffcd1620810)
    at ../../src/bytecode.c:630
#94 0x000000000057a2e1 in funcall_lambda (fun=140723821348978, nargs=140723821348952, 
    nargs@entry=1, arg_vector=0x7ffcd1620810, arg_vector@entry=0x7ffcd1620ad0) at ../../src/lisp.h:1614
#95 0x00000000005779bb in Ffuncall (nargs=2, args=args@entry=0x7ffcd1620ac8) at ../../src/eval.c:2787
#96 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=109664757, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821349656, args=<optimized out>, args@entry=0x7ffcd1620ac8)
    at ../../src/bytecode.c:630
#97 0x000000000057a2e1 in funcall_lambda (fun=140723821349740, nargs=140723821349656, 
    nargs@entry=2, arg_vector=0x7ffcd1620ac8, arg_vector@entry=0x7ffcd1620d88) at ../../src/lisp.h:1614
--Type <RET> for more, q to quit, c to continue without paging--
#98 0x00000000005779bb in Ffuncall (nargs=3, args=args@entry=0x7ffcd1620d80) at ../../src/eval.c:2787
#99 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=107187797, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821350304, args=<optimized out>, args@entry=0x7ffcd1620d80)
    at ../../src/bytecode.c:630
#100 0x000000000057a2e1 in funcall_lambda (fun=140723821350381, nargs=140723821350304, 
    nargs@entry=0, arg_vector=0x7ffcd1620d80, arg_vector@entry=0x7ffcd1621020) at ../../src/lisp.h:1614
#101 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd1621018) at ../../src/eval.c:2787
#102 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=107188101, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821350952, args=<optimized out>, args@entry=0x7ffcd1621018)
    at ../../src/bytecode.c:630
#103 0x000000000057a2e1 in funcall_lambda (fun=140723821350969, nargs=140723821350952, 
    nargs@entry=0, arg_vector=0x7ffcd1621018, arg_vector@entry=0x7ffcd1621230) at ../../src/lisp.h:1614
#104 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd1621228) at ../../src/eval.c:2787
#105 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=111354085, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821351504, args=<optimized out>, args@entry=0x7ffcd1621228)
    at ../../src/bytecode.c:630
#106 0x000000000057a2e1 in funcall_lambda (fun=140723821351527, nargs=140723821351504, 
    nargs@entry=0, arg_vector=0x7ffcd1621228, arg_vector@entry=0x7ffcd1621480) at ../../src/lisp.h:1614
#107 0x00000000005779bb in Ffuncall (nargs=1, args=args@entry=0x7ffcd1621478) at ../../src/eval.c:2787
#108 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=111353941, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821352080, args=<optimized out>, args@entry=0x7ffcd1621478)
    at ../../src/bytecode.c:630
--Type <RET> for more, q to quit, c to continue without paging--
#109 0x000000000057a2e1 in funcall_lambda (fun=140723821352108, nargs=140723821352080, 
    nargs@entry=4, arg_vector=0x7ffcd1621478, arg_vector@entry=0x7ffcd1621698) at ../../src/lisp.h:1614
#110 0x00000000005779bb in Ffuncall (nargs=5, args=0x7ffcd1621690) at ../../src/eval.c:2787
#111 0x0000000000579652 in Fapply (nargs=<optimized out>, args=0x7ffcd16217a8) at ../../src/eval.c:2393
#112 0x0000000000577a3c in Ffuncall (nargs=<optimized out>, args=args@entry=0x7ffcd16217a0)
    at ../../src/lisp.h:1862
#113 0x00000000005b6a64 in exec_byte_code
    (bytestr=<optimized out>, vector=8069533, maxdepth=<optimized out>, args_template=<optimized out>, nargs=nargs@entry=140723821352920, args=<optimized out>, args@entry=0x7ffcd16217a0)
    at ../../src/bytecode.c:630
#114 0x000000000057a2e1 in funcall_lambda (fun=140723821353040, nargs=140723821352920, 
    nargs@entry=1, arg_vector=0x7ffcd16217a0, arg_vector@entry=0x7ffcd1621a58) at ../../src/lisp.h:1614
#115 0x00000000005779bb in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7ffcd1621a50)
    at ../../src/eval.c:2787
#116 0x0000000000577b2e in call1 (fn=fn@entry=50736, arg1=arg1@entry=177062549) at ../../src/eval.c:2624
#117 0x000000000050523a in timer_check_2 (idle_timers=<optimized out>, timers=<optimized out>)
    at ../../src/lisp.h:855
#118 timer_check () at ../../src/keyboard.c:4534
#119 0x00000000005055fd in readable_events (flags=flags@entry=1) at ../../src/keyboard.c:3349
#120 0x00000000005060c8 in get_input_pending (flags=flags@entry=1) at ../../src/keyboard.c:6837
#121 0x00000000005061a1 in swallow_events (do_display=do_display@entry=true)
    at ../../src/keyboard.c:4274
#122 0x0000000000428b95 in sit_for
    (timeout=timeout@entry=122, reading=reading@entry=true, display_option=display_option@entry=1)
    at ../../src/dispnew.c:5764
#123 0x000000000050ad47 in read_char
--Type <RET> for more, q to quit, c to continue without paging--
    (commandflag=commandflag@entry=1, map=map@entry=195101907, prev_event=0, used_mouse_menu=used_mouse_menu@entry=0x7ffcd162222b, end_time=end_time@entry=0x0) at ../../src/lisp.h:944
#124 0x000000000050c3f0 in read_key_sequence
    (keybuf=keybuf@entry=0x7ffcd1622310, prompt=prompt@entry=0, dont_downcase_last=dont_downcase_last@entry=false, can_return_switch_frame=can_return_switch_frame@entry=true, fix_current_buffer=fix_current_buffer@entry=true, prevent_redisplay=prevent_redisplay@entry=false, bufsize=30) at ../../src/keyboard.c:9157
#125 0x000000000050db04 in command_loop_1 () at ../../src/lisp.h:855
#126 0x0000000000576b06 in internal_condition_case
    (bfun=bfun@entry=0x50d8e0 <command_loop_1>, handlers=handlers@entry=21120, hfun=hfun@entry=0x504510 <cmd_error>) at ../../src/eval.c:1336
#127 0x00000000004fef24 in command_loop_2 (ignore=ignore@entry=0) at ../../src/lisp.h:855
#128 0x0000000000576a75 in internal_catch
    (tag=tag@entry=51456, func=func@entry=0x4fef00 <command_loop_2>, arg=arg@entry=0)
    at ../../src/eval.c:1101
#129 0x00000000004feec3 in command_loop () at ../../src/lisp.h:855
#130 0x00000000005040d7 in recursive_edit_1 () at ../../src/keyboard.c:695
#131 0x0000000000504438 in Frecursive_edit () at ../../src/keyboard.c:766
#132 0x000000000041ee72 in main (argc=2, argv=0x7ffcd16226d8) at ../../src/emacs.c:1722

我在 Ubuntu 20.04 上用 emacs 27.1 和 clangd 11 没遇到卡死情况。

那我改用emacs27和clangd11试试。

同上楼用clangd11 没有卡死现象

我在Windows 上用Clangd 9.0 会出现emacs 卡死,目前升级到 clangd 11 还没出现卡死情况,有待继续观察。
另外还有个问题,不知道有没有人遇到:
第一次打开c++ 项目时,光标在main ( ) 函数的括号中时,会提示以下错误。之后就可以正常使用。

deferred error : (error Process [D:/emacs28/libexec/emacs/28.0.50/x86_64-w64-mingw32/cmdproxy.exe] exited abnormally : The system cannot find the path specified.

使用环境: Emacs 28.0.50 ,Nox + Clangd 11.0

update: 最近升级到Clangd 11.0 后,如果上下移动光标太快会造成Emacs 卡死,还不知道是Clangd的锅还是TabNine的锅

28都出来啦?我今天才编译了27。clangd用的还是10,但是尚未出现卡死。

早都出来了,自己编译master 就直接28吧。27都出正式版了,不需要编译的,windows下有二进制包。

1 个赞

朋友,你有在windows上编译的emacs28吗?求分享

Emacs 28 有预编译的测试版 Index of /gnu/emacs/pretest/windows/emacs-28
我自己是用 msys2 编译的最新版的 master native comp 版本。

用ccls没遇到过卡死

1 个赞