debugging--profiling-at-runtime
This commit is contained in:
		
							
								
								
									
										7
									
								
								chapter/Debugging.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								chapter/Debugging.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
## Debugging
 | 
			
		||||
- 常用技巧
 | 
			
		||||
- 复杂度
 | 
			
		||||
- 查看启动时间
 | 
			
		||||
- 运行时检测
 | 
			
		||||
- 检查Vim脚本
 | 
			
		||||
- 检查语法文件
 | 
			
		||||
							
								
								
									
										18
									
								
								chapter/General-tips.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								chapter/General-tips.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
### 常用技巧
 | 
			
		||||
如果你遇到了奇怪的行为,尝试用这个命令重现它:
 | 
			
		||||
> vim -u NONE -N
 | 
			
		||||
 | 
			
		||||
这样会在不引用vimrc(默认设置)的情况下重启vim,并且在 **nocompatible** 模式下(使用vim默认设置而不是vi的)。(搜索 ```:h --noplugin``` 命令了解更多启动加载方式)
 | 
			
		||||
 | 
			
		||||
如果仍旧能够出现该错误,那么这极有可能是vim本身的bug,请给 [vim_dev]("https://groups.google.com/forum/#!forum/vim_dev") 发送邮件反馈错误,多数情况下bug不会立刻解决,你还需要进一步研究
 | 
			
		||||
 | 
			
		||||
许多插件经常会提供新的(默认的/自动的)操作。如果在保存的时候发生了,那么请用 ```:verb au BufWritePost``` 命令检查潜在的问题
 | 
			
		||||
 | 
			
		||||
如果你在使用一个插件管理工具,在你找到问题之前请把他们标注出来。
 | 
			
		||||
 | 
			
		||||
问题还没有解决?如果不是插件的问题,那么肯定是你的自定义的设置的问题,可能是你的options或autocmd等等。
 | 
			
		||||
 | 
			
		||||
到了一行行代码检查的时候了,不断地排除缩小检查范围知道你找出错误,根据二分法的原理你不会花费太多时间的。
 | 
			
		||||
 | 
			
		||||
在实践过程中,可能就是这样,把 ```:finish``` 放在你的 **vimrc** 文件中间,Vim会跳过它之后的设置。如果问题还在,那么问题就出在```:finish```之前的设置中,再把```:finish```放到前一部分设置的中间位置。否则问题就出现在它后面的半部分设置,那么就把```:finish```放到后半部分的中间位置。不断的重复即可找到。 
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								chapter/Profiling-at-runtime.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								chapter/Profiling-at-runtime.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
### 运行时检测
 | 
			
		||||
 | 
			
		||||
需要的特性:+profile
 | 
			
		||||
 | 
			
		||||
Vim 提供了一个内置的运行时检查功能,能够找出运行慢的代码。
 | 
			
		||||
 | 
			
		||||
```:profile``` 命令后面跟着子命令来确定要查看什么。
 | 
			
		||||
 | 
			
		||||
如果你想查看所有的:
 | 
			
		||||
 | 
			
		||||
```Vim
 | 
			
		||||
:profile start /tmp/profile.log
 | 
			
		||||
:profile file *
 | 
			
		||||
:profile func *
 | 
			
		||||
<do something in Vim>
 | 
			
		||||
<quit Vim>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Vim 不断地在内存中检查信息,只在退出的时候输出出来。(Neovim 已经解决了这个问题用 ```:profile dump``` 命令)
 | 
			
		||||
 | 
			
		||||
看一下 ```/tmp/profile.log``` 文件,检查时运行的所有代码都会被显示出来,包括每一行代码运行的频率和时间。
 | 
			
		||||
 | 
			
		||||
大多数代码都是用户不熟悉的插件代码,如果你是在解决一个确切的问题,直接跳到这个日志文件的末尾,那里有 ```FUNCTIONS SORTED ON TOTAL TIME``` 和 ```FUNCTIONS SORTED ON SELF TIME``` 两个部分,如果某个function运行时间过长一眼就可以看到。
 | 
			
		||||
							
								
								
									
										10
									
								
								chapter/Profiling-startup-time.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								chapter/Profiling-startup-time.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
### 查看启动时间
 | 
			
		||||
 | 
			
		||||
感觉Vim启动的慢?到了研究几个数字的时候了:
 | 
			
		||||
 | 
			
		||||
```vim
 | 
			
		||||
vim --startuptime /tmp/startup.log +q && vim /tmp/startup.log
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
第一栏是最重要的因为它显示了**绝对运行时间**,如果在前后两行之间时间差有很大的跳跃,那么是第二个文件太大或者含有需要检查的错误的VimL代码。
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								chapter/Verbosity.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								chapter/Verbosity.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
### debug等级
 | 
			
		||||
 | 
			
		||||
Vim现在正在使用的另一个比较有用的方法是增加debug信息输出详细等级。现在Vim支持9个等级,可以用```:h 'verbose'```命令查看。
 | 
			
		||||
 | 
			
		||||
```vim
 | 
			
		||||
:e /tmp/foo
 | 
			
		||||
:set verbose=2
 | 
			
		||||
:w
 | 
			
		||||
:set verbose=0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
这可以显示出所有引用的文件、没有变化的文件或者各种各样的作用于保存的插件。
 | 
			
		||||
 | 
			
		||||
如果你只是想用简单的命令来提高等级,也是用 ```:verbose``` ,放在其他命令之前,通过计数来指明等级,默认是1.
 | 
			
		||||
 | 
			
		||||
```vim
 | 
			
		||||
:verb set verbose
 | 
			
		||||
"  verbose=1
 | 
			
		||||
:10verb set verbose
 | 
			
		||||
"  verbose=10
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
通常用等级1来显示上次从哪里设置的选项
 | 
			
		||||
 | 
			
		||||
```vim
 | 
			
		||||
:verb set ai?
 | 
			
		||||
"      Last set from ~/.vim/vimrc
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
一般等级越高输出信息月详细。但是不要害怕,亦可以把输出导入到文件中:
 | 
			
		||||
 | 
			
		||||
```vim
 | 
			
		||||
:set verbosefile=/tmp/foo | 15verbose echo "foo" | vsplit /tmp/foo
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
你可以一开始的时候就打开verbosity,用 ```-V``` 选项,它默认设置调试等级为10。 ```vim -V5```
 | 
			
		||||
		Reference in New Issue
	
	Block a user