注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

2015-08-14-windows10系统gvim的tagbar插件显示tag侧边栏时点击函数名导致gvim程序崩溃的bug.markdown  

2015-08-14 14:53:03|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

错误时的调用栈
--------------

```
	comctl32.dll!CToolTipsMgr::GetToolAtPoint(struct HWND__ *,int,int,int,int)	Unknown
 	comctl32.dll!CToolTipsMgr::ToolAtMessagePos(void)	Unknown
 	comctl32.dll!CToolTipsMgr::ShowVirtualBubble(void)	Unknown
 	comctl32.dll!CToolTipsMgr::HandleRelayedMessage(struct HWND__ *,unsigned int,unsigned int,long,unsigned int)	Unknown
 	comctl32.dll!CToolTipsMgr::ToolTipsWndProc(struct HWND__ *,unsigned int,unsigned int,long)	Unknown
 	comctl32.dll!CToolTipsMgr::s_ToolTipsWndProc(struct HWND__ *,unsigned int,unsigned int,long)	Unknown
 	user32.dll!__InternalCallWinProc@20()	Unknown
 	user32.dll!_UserCallWinProcCheckWow@36()	Unknown
 	user32.dll!_SendMessageWorker@24()	Unknown
 	user32.dll!_SendMessageW@16()	Unknown
 	comctl32.dll!_CallNextSubclassProc@20()	Unknown
 	comctl32.dll!_MasterSubclassProc@16()	Unknown
 	user32.dll!__InternalCallWinProc@20()	Unknown
 	user32.dll!_UserCallWinProcCheckWow@36()	Unknown
 	user32.dll!_DispatchMessageWorker@8()	Unknown
 	user32.dll!_DispatchMessageW@4()	Unknown
 	gvim.exe!00464eeb()	Unknown
```

是鼠标移上去的时候 显示一个 tooltip,也就是 函数原型的 ballon 提示时,出发了windows 10 里面comctl32 控件的动作导致崩溃了。



看上去是 vim里面的一个  'balloonexpr' 'bexpr'  的特性
http://vimdoc.sourceforge.net/htmldoc/options.html#'balloonexpr'



对应的tagbar的代码

```
    if has('balloon_eval')  检查是否编译了这个特性
        setlocal balloonexpr=TagbarBalloonExpr()
        set ballooneval  他这里 打开了 开关
    endif


" TagbarBalloonExpr() {{{2
function! TagbarBalloonExpr() abort
    let taginfo = s:GetTagInfo(v:beval_lnum, 1)

    if empty(taginfo)
        return ''
    endif

    return taginfo.getPrototype(0)
endfunction
```



这个是很鸡肋的功能, 简单的禁用了这个 ballon eval 功能就可以了。  
可以通过这个来设置,不过默认vim是关闭的,  是tagbar给打开了的。
看vimrc的最后加上这一句是有效的。
```
set noballooneval   " vimrc比插件早加载,后面那些插件里面又打开了,导致设置无效。进入界面再手工设置就可以。用autocmd 设置延时执行?
set balloondelay=10000000  " 设置一个超长停留时间,鼠标停10000秒才显示 ballon tooltip, 插件里面不改这个,这样基本就禁止tooltip功能了


更好的办法当然是修复vim 源码中的bug, 让他在 windows 10 不会崩溃。 


  评论这张
 
阅读(253)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017