VIM+GDB linux c/c++ 的编程利器
VIM+GDB linux c/c++ 的编程利器
http://blog.csdn.net/jackyvan/archive/2010/01/15/5193693.aspx
其实VIM也能把编译 调试集成在一起,像是一个IDE一样。
首先现在VIM的源码,因为要集成调试环境的话需要重新编译VIM才行,所以我们不如重新安装一个。
VIM的现在地址:
http://www.vim.org/sources.php
然后下载VIMGDB,这是vim的集成调试环境的一个重要插件程序。
地址:http://sourceforge.net/projects/clewn/files/vimGdb/ ,选择对应的VIM版本下载。
把下载下来的文件都放到 ~/install/中
然后:
cd ~/install/
tar xjf vim-7.2.tar.bz2
tar xzf vimgdb72-1.14.tar.gz
patch -d vim72 --backup -p0 < vimgdb/vim72.diff
这样就解压出vim和vimgdb,并对vim的configure文件自动做了调整
接下来:
cd ~/install/vim72
make
make install
就装好vim了。
然后:
cd ~/install/vimgdb
mkdir ~/.vim
tar zxf vimgdb_runtime.tgz -C ~/.vim/
这样就装好了,接下来启动vim
先把vimgdb的帮助导进去
:helptags ~/.vim/doc
这样就可以
:help vimgdb 来看vimgdb的帮助了
这样 我们先打开一个c程序
并且为这个程序写好一个Makefile文件
用
:make
来编译这个源码。
根据生成的报错信息 我们可以来修改程序,敲回车会跳转到第一个错误,用cnext 会到下一个错误,cprevious 到上一个错误,cc n 跳到第n个错误,cc 显示当前错误的详细信息
接下来我们要试一下vimgdb的调试功能了。
首先:
:run macros/gdb_mappings.vim
来加载vimgdb映射的键
这个时候我们可以用
:help gdb-mapping 来查看加载键的用法
用<F7> 可以启用/关闭加载的键
现在,按空格键,就会在当前窗口下方打开一个小窗口,这就是vimgdb的命令窗口,可以在里面输入gdb命令。现在,我们在这个窗口中输入”gdb “,按回车后,command-line窗口自动关闭,而在当前窗口上方又打开一个窗口,这个窗口是gdb输出窗口。现在vim的窗口布局如下(我又按空格打开了command-line窗口)
然后在这个窗口里
file test
打开要调试的程序
然后在源码文件里可以CTRL+B 来设置断点,R 来运行程序,S 单步执行 其他命令可以用:help gdb-mapping 来查看
我们可以用
:bel 20vsplit gdb-variables 在右侧打开一个小窗口来显示要跟踪的变量的值
在源码文件里,用 "v " (表示visual模式) 选定要跟踪的变量,然后CTRL+P 把变量加
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......
原文地址:http://dev.yesky.com/147/2356147.shtml
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能 ......
对于序列求和的程序大家不会陌生,而我今天看到的这个程序个人觉得比较好,所以贴上来共享一下。
要求:输入类似于87 98 67 56 0的任意序列,但是以零结尾。然后输出序列的和。
程序如下 :
/********************************************
* Name : sum.c
* Purpose : sum
* Author : zimo
  ......
C/C++中结构体(struct)知识点强化(二)
出处:PConline 2005年03月07日 作者:管宁 责任编辑:xietaoming
首先,我们写这个程序,要考虑到由于是一个链表结构,我们不可能知道它的大小到底是多大,这个问题我们可以用动态开辟堆内存来解决,因为堆内存在程序结束前始终是有效的,不受函数栈空间生命期的限制, ......
前面一篇我们介绍了结构体,这篇终于能够介绍函数了。为什么这么说呢?因为函数非常重要。就这么简单。嘿嘿!之所以在这时才讲函数,是因为本篇将联系到前面的每一篇,这样函数才能体现的透彻。那我们就迫不及待的切入正题。
从第一篇Helloworld开始到现在,就没有脱离函数。那就是我们的main函数。main函数也是一个普通的 ......