vi/vim使用进阶: vimgdb调试时的常见问题及解决

<< 返回vim使用进阶: 目录

在文章在vim中使用gdb调试 – vimgdb中我介绍了如何使用vimgdb补丁在vim/gvim中调试程序。后来陆续有一些读者反馈了他们在使用中遇到的问题。在本文中总结一下。

[ 问题一: 运行GDB命令时提示”unable to read from GDB pseudo tty”? ]

有读者在试图执行GDB命令时,出现上面的提示。

出现这个问题是由于没有正确设置gdbprg变量。使用下面的命令设置一下GDB程序的位置即可解决此问题:

:set gdbprg=/path/to/gdb 

请把上面的/path/to/gdb替换成你计算机中GDB程序所在的路径。你可以把这句话加到你的vimrc中,这样每次启动vi时会自动设置此变量。

[ 问题二: 提示”GDB busy: command discarded, please try again”? ]

当你的程序需要用scanf()或者getchar()这类函数读取用户输入时,你可能会看到过这样的提示:

GDB busy: command discarded, please try again

出现这个提示,说明你的GDB正在等待用户输入,所以无法响应你所输入的其它GDB命令。

在使用vimgdb时,如果你的程序需要读取用户输入,你必须通过GDB的tty命令或run来重定向程序的标准输入。

首先,你打开一个终端(可以是xterm/rxvt/urxvt/putty/…),在此终端内输入命令tty


$ tty
/dev/pts/17 

这条命令用来显示此终端所使用的设备文件名。获得了这个设备文件名后,你就可以重定向程序的标准输入输出到这个终端,在GDB中输入下面的命令:

tty /dev/pts/17 

执行完这条命令后,程序的标准输入/输出就被重定向到/dev/pts/17了,这样,当执行到scanf()getchar()函数时,切换到那个终端输入指定参数,然后回车,程序就会继续向下执行。

[ 问题三: vimgdb可以在windows下使用吗? ]

vimgdb不能在windows下使用。不过你可以用作者提供的Clewn或Pyclewn。这两个程序可以在Windows的Vim/Gvim中使用。

这里有我写的一篇关于pyclewn的教程:在VIM中使用GDB调试 – pyclewn,clewn的用法与之类似。

[ 问题四: 按空格后vimgdb的命令窗口没有弹出来? ]

首先确保vimgdb的按键定义文件存在。执行下面的命令:

:set runtimepath?  

检查这条命令所列出的所有目录,如果任一目录中包含macros/gdb_mappings.vim文件,说明你的按键映射文件已经存在。如果你没有找到该文件,到vimgdb目录中找到这个命令,拷贝到上述任意一个目录中。

接下来用下面的命令加载vimgdb的键绑定:

:run macros/gdb_mappings.vim 

现在,你应该可以使用vimgdb所定义的快捷键了。

[参考文档]

<< 返回vim使用进阶: 目录

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb-faq/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 在标题和状态栏中显示Screen的窗口名称

Windows上使用putty+screen时,screen会把当前窗口的名称显示在putty的标题栏上,这样当前处于哪个窗口就一目了然了。

但在Easwy的Linux系统中,使用urxvt+screen时,发现当前窗口的名称不会显示在标题栏里。在网上搜索了很久才找到答案。

要想允许Screen改变rxvt/rxvt-unicode(即urxvt)的标题栏,需要在.screenrc中加入一句termcapinfo信息:

termcapinfo rxvt 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007' 

如果你用的是xterm,也需要在.screenrc中加入一句类似的话,具体内容见参考文档一。

可是,在标题栏里只显示当前的窗口名字,不能把把窗口的列表显示出来,在使用时还不是很方便。幸好我们可以设置Screen的状态栏,使之显示我们想要的内容。

Easwy.screenrc中加入了下面的内容:

caption always "%{= kw}%-w%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+w %=%d %M %0c %{g}%H%{-}" 

上面这段话会在Screen窗口的最下面一行显示出所有窗口的列表,以及主机名等信息。它的效果图如下:

现在的Screen用起来就方便多了。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/display-window-list-on-title-bar-and-status-bar-of-screen/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux使用笔记: 使用Samba访问windows的共享目录

通常我们使用Samba都是在Windows上访问做为Samba服务器的Linux。但是在某些时候情况会反过来,你可能需要从Linux上访问Windows共享出来的目录。幸运的是,Samba本身也支持这种类型的访问。

要想从Linux访问Windows上的共享目录,需要安装smbclient工具。在Debian或Ubuntu上可以使用下面的命令安装:

aptitude install smbclient smbfs

在CentOS上则使用yum命令安装:

yum install samba-client.i386 

安装好smbclient工具,就可以使用mount命令来挂载Windows上的共享目录了:

mount -t cifs -o username=easwy //windows-server/share /mnt/winshare 

在这里我们使用的文件系统类型是cifs(Common Internet File System)而不是smbfs,因为Linux Kernel将不再支持smbfs。而从这个网站测试结果来看,smbfs的性能也远不如cifs。

我们所用的mount -t cifs命令其实会调用mount.cifs,如果你在mount时失败,先检查一下你的mount.cifs命令是否存在。

如果windows计算机处于域中,那么在username一项输入你的域用户名domain/username就可以了。windows-server可以是一台计算机的名称,也可以是一个IP地址。

如果想列出Windows上的所有共享资源,可以使用命令:

smbclient -L //windows-server -U easwy 

这条命令会列出windows服务器上所有的共享目录和文件。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/mount-a-windows-shared-folder-on-linux-with-samba/

文章的脚注信息由WordPress的wp-posturl插件自动生成