在此之前,我无论是在Windows还是在Linux上开发一直都使用SourceInsight这个软件,对源文件进行编写。
SourceInsight是个非常强大的软件,而且也较易上手。
(注Linux平台开发时使用的是SourceInsight(WIN)+FTP(上下传文件和LinuxPC))
程序仿真和Debug时,原来使用的一直都是使用芯片厂商的专用仿真器,有的仿真器的仿真Debug软件的GUI化很完善,使用方法也很便利。(用鼠标点来点去就行了 + 一些特定命令)
现在在Linux平台上开发软件,同时仿真Debug使用的是GDB(the GNU Project debugger),通过GNU Emacs来调用。
就是因为这个原因,才准备使用Emacs进行对源文件的编写。
单独的Emacs软件的话,虽然也有着除了编辑以外的各种各样的功能,例如Mail,网页浏览等等,但是,仅对于我个人我还是觉得他就是个文本编辑器,因为别的功能我不用,也用不上。而且这个编辑器使用时还非常的费劲,觉不出他比微软的记事本强在哪里。
但是,Emacs支持配置其工作环境,当结合了一些插件后,他就发挥出强大的功能了。
这个强大的功能 = SourceInsight+专用仿真Debug软件之和。
还有就是,他是免费的,FreeDownload的,可自定义的。
微软在努力让我们告别键盘,Linux则建议大家没事别老碰鼠标。
Emacs + gtags + cedet + ecb + doxymas + session + GDBEmacs:GNU Emacs
gtags:GNU GLOBAL source code tag system
cedet:Collection of Emacs Development Environment Tools
ecb:Emacs Code Browser
doxymacs:Doxygen + Emacs
Doxygen:Source code documentation generator tool
session:Session Management for Emacs
GDB:GNU Project debugger
个人环境:VMware7.0.0 + (Fedora7+Ubuntu9.10)
Fedora7:现在fedora的最高发行版是Fedora12,所以用7的话,如果yum在线安装,包的版本可能较低。
Ubuntu9.10:现在的最新版,apt在线安装的话,包版本较新。
较新不是最新,想最新的话,去各自官网现在src安装吧。
目标源代码:C语言
如果没有现成的代码就下个kernel或gcc或glib的源代码吧。
但是建议写个hello来试运行,因为前者的源代码都太大了,gtags建立tags或htags创建HTML模式源代码和doxygen生成文档等的时候,花费时间极长。
同时也写好hello的configure.ac和Makefile.am吧,能够编译后执行,以便体验功能。
Emacs:GNU Emacs (Ver:23.1)
Emacs:Editor MACroS(宏编辑器)
HomePage:
功能和热键的学习:
- 《学习GNU Emacs》(68元)/《GNU Emacs Lisp 编程入门》(38元)
网上有中文扫描版和英文版的下载,忘了在哪里下的了,搜搜吧。
扫描版不清晰,例代码根本看不清,建议购入原书。
下载安装:参考上记Homepage。
重点:
记住个别编辑工作中常用Hotkey。
知道.emacs文件和
设置的作用和用法。
知道LISP语言。(但是不一定要掌握这种语言,抄抄网络上大侠的就行,同时也希望更多的人加入到Lisp行列中)
简单说明:
- .emacs文件:是Emacs启动时,自动读取用户自定义配置的默认的配置文件
(手动创建该文件,自定义配置都写在该文件中,LISP语言,"/home/yourname/"路径下) - shell命令启动Emacs时,如果用'emacs -q'命令,则不加载任何额外的自定义设置启动Emacs.
- :由'.emacs'文件中编写的相应的自定义配置,调用的关联**.el文件的存放路径。
(在.emacs中记入该路径时,建议使用绝对路径.这样通过shell命令无论用哪个帐户的ENV启动Emacs时,都能正确读取对应的**.el文件。也就是无视'~'所代替的ENV中的$HOME的值是什么,LISP语言)
这个的文件夹,可以手动创建(推荐),也可以用Emacs软件的默认路径(/usr/local/share/emacs/site-lisp/)。 - 下记的.emacsLoadpath 就是手动创建的一个文件夹,其中放置一些,准备使用的el文件啦,cedet啦,ecb啦,gtags.el啦等等。
例: ;load-path (add-to-list 'load-path "/home/yourname/.emacsLoadpath") |
个人.emacs文件中的内容:
(仅安装emacs软件后,即可完成的动作,无需安装其他的组件,但需要个别插件,都是参考其他大侠的)
;load-path (add-to-list 'load-path "/home/yourname/.emacsLoadpath")
(custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(column-number-mode t);默认显示行号的同时,也显示列号 '(display-time-mode t);显示当前时间 '(inhibit-startup-screen t);关闭启动画面 '(show-paren-mode t);显示与当前光标所在位置的括号匹配的另一个括号 )
(setq visible-bell t);关闭出错时的蜂鸣提示声 (mouse-avoidance-mode'animate);当鼠标箭头与光标相近时,使鼠标箭头自动移开 ;(blink-cursor-mode nil);光标不闪烁 (setq-default cursor-type 'bar);光标显示为一竖线 (tool-bar-mode -1);; 不显示emcas的工具栏 (menu-bar-mode -1);; 不显示emcas的菜单栏,按ctrl+鼠标右键仍能调出该菜单 (setq x-select-enable-clipboard t);; 支持emacs和外部程序之间进行粘贴 (fset 'yes-or-no-p 'y-or-n-p);以 'y/n'字样代替原默认的'yes/no'字样 (setq frame-title-format "%b@emacs");在最上方的标题栏显示当前buffer的名字 (setq make-backup-files nil);关闭自动备份功能 (setq auto-save-mode nil);关闭自动保存模式 (setq auto-save-default nil);不生成名为#filename# 的临时文件 (setq require-final-newline t);; 自动的在当前的buffer文件的最后加一个空行 (global-set-key "\r" 'align-newline-and-indent);;自动缩进变为 (setq echo-keystrokes 0.1);; 尽快显示按键序列提示 (global-font-lock-mode t);; 语法高亮 ;; 用来显示当前光标在哪个函数 ;(require 'which-func) (which-func-mode 1) (setq which-func-unknown "unknown") ;; 用M-x执行某个命令的时候,在输入的同时给出可选的命令名提示 (icomplete-mode 1) (define-key minibuffer-local-completion-map (kbd "SPC") 'minibuffer-complete-word)
(global-hl-line-mode 1);;高亮当前行
;;;;;;;;;;;;;;;;;启动时最大化;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'maxframe) (add-hook 'window-setup-hook 'maximize-frame t) ;下载maxframe.el并放置在中 ;http://emacsblog.org/2007/02/22/maximize-on-startup-part-2/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;web方式显示行号;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;(set-scroll-bar-mode 'right);滚动条在右侧 (set-scroll-bar-mode nil) ; 不显示滚动条, even in x-window system (recommended) (require 'wb-line-number) (wb-line-number-toggle) ;下载wb-line-number.el并放置在中 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;cc-mode;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "/home/lb/.emacsLoadpath/cc-mode-5.31.3") (require 'cc-mode) (c-set-offset 'inline-open 0) (c-set-offset 'friend '-) (c-set-offset 'substatement-open 0) ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(set-face-background 'default "gainsboro");背景设定 ;颜色参考value:X界面菜单栏中[edit]->[text properties]->[Display colors]
;未完其他内容在本文的后续部分介绍 ;session ;global(GNU GLOBAL source code tag system) ;##cedet(Collection of Emacs Development Environment Tools) ;##ecb(Emacs Code Browser) ;##doxymacs ;##compile ;##GDB
|
gtags:GNU GLOBAL source code tag system (Ver:5.7.7)
HP:
看看Tutorial(指导)中的Overview就知道,通过gtags能够建立软件工程项目。
这就说明,Emacs+gtags的组合,就可以是能够创建工程项目的编辑软件了。
(基本等于sourceinsight,如果在加上cedet和ecb就更完美了)
还有很多人不用gtags而用的是cscope,我个人没用过cscope,大家可尝试使用。
支持的基本环境
- Shell command line
- Bash shell
- Vi editor (Nvi, Elvis, vim)
- Less viewer
- Emacs editor (Emacs, Mule, Xemacs)
- Web browser
- Doxygen documentation system
基本用法:
①下载安装gtags后,在源文件的目录中,键入"gtags -v"命令,就会生成相应文件。
[xx@localhost sys]$ gtags -v例:source code(/usr/src/sys) 123MB
GPATH 1MB `GPATH' path name database
GTAGS 26MB `GTAGS' definition database
GRTAGS 22MB `GRTAGS' reference database
GSYMS 23MB `GSYMS' symbol database
-------------------------------------
total of tag files 72MB
gtags的其他options的含义,请参考man手册。
(辅助:http://blog.chinaunix.net/u3/98822/showart_2129660.html)
②下载安装gtags后,会有名为gtags.el的文件,注意看安装时make install的list,即可找到gtags.el的安装位置(默认目录是:/usr/local/share/gtags/)。
将gtags.el的路径设置为Emacs的。
例:在`$HOME/.emacs'文件中加入下记代码例。(setq load-path (cons "/home/owner/global" load-path));gtags.el load-path (autoload 'gtags-mode "gtags" "" t);gtags-mode is true |
从此启动Emacs后,及在中load了gtags.el文件,并将gtags-mode设置为真(等同于每次启动后,都在Emacs中的M-x,手动键入gtags-mode)。
个人.emacs文件中的内容:;##global(GNU GLOBAL source code tag system);;;;;;;;;;;;;;;;;;;;; ;to use global from Emacs, you need to load the `gtags.el' and execute gtags-mode function in it. ;you need to add it to load-path. for `gtags.el'file. ;(add-to-list 'load-path "");已经在之前的代码中load完了 (autoload 'gtags-mode "gtags" "" t);;start Emacs and execute gtags-mode function. (setq c-mode-hook '(lambda () (gtags-mode 1)));get into gtags-mode whenever you get into c-mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
③当源程序的源文件的内容变化了(导致行号变化),或追加删除了源文件等等。只要有改变,就要更新gtags生成的那4个文件。
例:source code(/usr/src/sys)
[xx@localhost sys]$ gtags -vi
or
[xx@localhost sys]$ global -u (推荐)
详细用法:
直接参考gtags的英文的Tutorial(指导)。
有很多章节可以跳过,因为那是global在别的编辑软件中的应用方法的说明。(例如shell,vi等)
章节还是要必看的。
看了gtags的英文的Tutorial(指导)后,发现htags也蛮有用的。
$ htags -Ff -sanohIvt 'Welcome to XXX source tour!' --table-flist=1
$
注:gtags-parser和gtags-cscope没搞明白,哪位大侠能帮帮忙解说一下,或发个说明链接什么的。
gtags会调用gtags-parser和gtags-cscope对目标代码,进些分析,目的为生成源码的tags。?
gtags完成的基本动作(具备键盘的快捷键):
- 鼠标滚轮键(下按):根据上下文,找到"函数或常量或变量"的"定义或调用"的位置。
或,按【enter】。 - 鼠标右键:返回。(就是按完滚轮键后,想返回到原来刚才的位置的话,就按右键)
鼠标右键(返回),我想应该是emacs的功能,而不是Global的功能。
如果键盘操作的话,应该是:
①调用处搜索关键字→ 结果列表→ [Enter]键选择→ 被选部分的代码表示
②被选部分处,再次搜索相同关键字→ 结果列表→ [Enter]键选择→ 原调用处的代码再表示 - 光标+Enter:当按滚轮键后,出现的调用位置的结果为多个时,将光标调整到相应行,按下回车即可跳转到对应位置。
(如图,名为_exit_ts的函数在整个项目中,有多个位置调用他)
※※※※※ 先去试试上记内容吧!如果不行,往下进行也没什么意义。※※※※※
CEDET:Collection of Emacs Development Environment Tools Ver:1.0pre6
HP:
安装:setup.shtml (切记看看下载后的INSTALL文件,需要make编译)
没有CEDET的话,后续的ecb不能安装使用。
这个组件,安装简单,使用便利。(望大家阅读文档,了解他的各种功能)
我个人常用的两个功能是,speedbar和smart code completion(自动补全)
个人.emacs文件中的内容:;##cedet(Collection of Emacs Development Environment Tools);;;;;; (load-file "/home/yourname/.emacsLoadpath/cedet/common/cedet.el") ;读取子目录中的特别的 .el 文件 (global-ede-mode 1); Enable the Project management system (semantic-load-enable-code-helpers); Enable prototype help and smart completion (global-srecode-minor-mode 1); Enable template insertion menu (global-set-key [(f4)] 'speedbar-get-focus);speedbar快捷键[F4] (define-key c-mode-base-map [(control tab)] 'semantic-ia-complete-symbol-menu);自动补全Ctrl+tab ;(control tab)(meta ?/) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
speedbar插图:
smart code completion(自动补全)插图:
就是当输入一个已有的函数名或变量常量名的时候,输到一半时按快捷键自动补全剩余的字母。
我自定义的该功能的快捷键是 + ,也有设成 + / 的,根据个人习惯,自行定义。
来自官网的插图:
注:当前发布的最新版的CEDET Ver:1.0pre6,在使用的时候发现了一个问题。
就是在执行自动补全功能,索引tags时,到LL/confname.h的10%时,Linux系统会down机。
这个不幸的事情在我的电脑上发生了。
解决方法(转载):http://hi.baidu.com/susdisk/blog/item/dceeded0278c7d85a1ec9c01.html
----转载------
cedet索引LL/confname.h时emacs挂掉解决方案
2009年12月06日 星期日 19:11
使用cedet1.0pre6时一直有这个问题,一旦看一个新工程时,semantic进行索引tags,到LL/confname.h的10%时就会down掉,没有响应。在mail-list里面已经有讨论(),解决方案也很简单,不用1.0pre6,使用cvs版本,如果还使用了ecb,则在重新换cvs版本后还要重编译ecb,否则emacs是load error的。cedet的cvs版本获取地址:
(shell命令)
cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P cedet
现在好了,emacs不会在看一个新工程时就挂掉了,而且听说cvs版本的补全功能更完备一些。
------------
ECB:Emacs Code Browser Ver:ecb-2.40
HP:
安装:docs/Installation.html#Installation
其中Requirements内容中的1和2还是必要的,3和4对于我来说用不上(我的环境非XEmacs,目标代码也不是Java)
辅助:
http://blog.csdn.net/intrepyd/archive/2009/07/09/4333893.aspx
- 其中在上记"辅助"的blog中设置[鼠标支持]的时候,fedora使用'鼠标滚轮下按'的方式选择和设置。
- 关闭ecb的"每日提醒"和info和upgrandoption界面,请参考下记.emacs文件中的代码。
疑问:ecb中的Methods窗口为什么有的时候是空的,什么都没有?
有的时候能够正确表示当前源文件中定义的函数/类型/成员列表呢?
难道是当前的文件定义的数量太多?
貌视保存一下当前文件,就能正确表示了。(待反复确认)
个人.emacs文件中的内容:
;##ecb(Emacs Code Browser);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "/home/lb/.emacsLoadpath/ecb") (load-file "/home/lb/.emacsLoadpath/ecb/ecb.el") (require 'ecb) (require 'ecb-autoloads) ;(setq ecb-auto-activate t);自动启动ecb (setq ecb-auto-activate t;自动启动ecb ecb-tip-of-the-day nil;不显示每日提醒 inhibit-startup-message t;不知道什么意思,望各位指导 ecb-auto-compatibility-check nil; ecb-version-check nil; ) (global-set-key [f8] 'ecb-activate) ;;定义F8键为激活ecb (global-set-key [f7] 'ecb-deactivate) ;;定义F7为停止ecb ;;;; 各窗口间切换 (global-set-key [M-left] 'windmove-left) (global-set-key [M-right] 'windmove-right) (global-set-key [M-up] 'windmove-up) (global-set-key [M-down] 'windmove-down) ;;;; 使某一ecb窗口最大化 (define-key global-map "\C-c1" 'ecb-maximize-window-directories) (define-key global-map "\C-c2" 'ecb-maximize-window-sources) (define-key global-map "\C-c3" 'ecb-maximize-window-methods) (define-key global-map "\C-c4" 'ecb-maximize-window-history) ;;;; 恢复原始窗口布局 (define-key global-map "\C-c`" 'ecb-restore-default-window-sizes) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
ecb界面插图:
ecb的Method窗口最大化:
官网的各种插图:
screenshots/index.html
※※※※※ 到这里是不是觉得已经可以基本完全=SourceInsight了呢?※※※※※
※※※※※ 去试试上记内容吧!如果不行,往下进行还是没啥意思。 ※※※※※
doxymacs:Doxygen + {X}Emacs Ver:1.8.0
文档文档文档,文档是写给谁的?写给别人看的?写给领导看的?
我觉得文档是写给你自己的,为了备忘、整理思路和确认检查。(例如本贴,望大家都来留下一笔吧)
但是写文档,好像挺费劲呀。尤其是coding完成/功能实现之后,就更不愿意回过头来写已经完成的功能的设计文档了。
其实设计文档都应该在实际coding之前完成,而不是,之后补写。
那么,就用Doxygen根据代码来生成文档吧。不过生成的文档,只能当做该模块的外部规格文档。详细设计文档可以在此基础上修改做成。使得文档的做成变得简单方便了。
那Doxymacs和Doxygen是什么关系呢?
Doxygen是根据code生成文档的工具。
主要是根据code中的注释内容生成文档,这个注释是要按照Doxygen工具中约定的写法格式才能够正确的生成文档。
他可以使你养成写注释的习惯,写好注释的习惯。
同时你做成的代码,后期可维护能力也大幅提高。
如果你看到几千行的code一行注释都没有,会不会有种想吐的感觉呢?
Doxymacs则是结合在Emacs中的插件。
通过快捷键,自动完成符合Doxygen中要求的注释格式。
当然注释的具体内容是要由设计者自行添加的。
Doxymacs HP:
辅助:http://blog.chinaunix.net/u3/98822/showart_2137605.html
个人.emacs文件中的内容:
;##doxymacs;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "/home/lb/share/emacs/site-lisp/");读取安装el的路径 (require 'doxymacs) ;; 启动doxymacs ;;注释高亮,针对C和C++程序 (defun my-doxymacs-font-lock-hook () (if (or (eq major-mode 'c-mode) (eq major-mode 'c++-mode)) (doxymacs-font-lock))) (add-hook 'font-lock-mode-hook 'my-doxymacs-font-lock-hook) (doxymacs-mode);doxymacs-mode常true (global-set-key [(f6)] 'doxymacs-mode);doxymacs-mode快捷键[F6] ;(add-hook 'c-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode ;(add-hook 'c++-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
Doxygen:Source code documentation generator tool Ver:1.6.2
HP:~dimitri/doxygen/index.html
安装方法和使用方法,看看Manual吧。
辅助:
http://blog.csdn.net/SigmaSys/
http://blog.csdn.net/nightelve/archive/2008/05/31/2498047.aspx
http://blog.chinaunix.net/u3/98822/showart_2136698.html
生成的文档的格式类型:
HTML
LaTeX
RTF
XML
Man Page
Doxygen会根据生成的configuration文件中的设定,来生成对应的文档。
Doxywizard可以更方便的设置这个configuration设定文件(GUI化)。
要么就用text模式来自行设置configuration文件,这个文件有点像Makefile文件的感觉。
看完Getting started章节后,即可生成你的第一份文档了。
不过详细的内容,还是请仔细阅读Manual。
关于Doxywizard:
使用源代码安装,没能安装上。异常的messages忘了是什么就不贴出来了。
终于装上了,http://blog.chinaunix.net/u3/98822/showart.php?id=2154045
但是,由于使用的是fedora系统,所以通过yum找到了Doxywizard 1.5.5,并安装成功。(其他Linux使用apt命令)
那么就将Doxywizard 1.5.5的贴图发出来让大家看看
(不知和doyxgen 1.6.2一起使用会有什么异常,也许是新的个别选项无法设置吧)
(建议大家源码安装和doyxgen 1.6.2匹配的Doxywizard)
哦,对了这个Doxywizard的启动是通过shell命令方式启动的,不是点击图标的形式。
插一张,doxygen生成的method图,以便大家参考,当然还生成各个函数的独立的图等等
有时通过method图,也能发现软件潜在的风险,如下图main函数的红色箭头部分
对于软件的分析,仅用上面的method类状态迁移图是不够的,尤其是对别人的代码进行分析。
再生成流程图吧。(autoflowchart or Crystal REVS)(非doxygen)
http://blog.chinaunix.net/u3/98822/showart_2145179.html
关于Fedora的yum:
yum是在线更新fedora的重要工具之一:Yellow dog Updater
yumex是yum命令的图形化前端可选组件。(yum extender)
HP:http://www.yum-extender.org/blog/
安装时,可使用shell命令:$ yum install yumex
网上相关说明很多。(yum命令的用法)
插图:
※※※※※文档已经能生成了,后面内容都是辅助内容了(但用处很大,提高效率)※※※※※
session:Session Management for Emacs Ver:session-2.2a
HP:
下记转载:
来自
----------------------
5.2 session
5.2.1 session简介
session扩展包可以使Emacs保存每次编辑的一些历史记录, 这样, 在下次打开Emacs时就可以使用上下键在以前输入的信息中选取, 十分方便实用.
5.2.2 session的使用
session的使用十分简单, 只需要在~/.emacs中加入如下几句就可 以了:
(add-to-list 'load-path "")
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
----------------------
来自
----------------------
;;记录所有操作
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
;;记录和恢复屏幕
(load "desktop")
(desktop-load-default)
(desktop-read)
;;desktop自动存盘模式,23需要加
(desktop-save-mode 1)
----------------------
在GNU Emacs的Manual中有详细的说明。
找找吧。google下"Emacs session"就有。
注:在使用session的时候,每次启动都有个提示信息,需要按'y'后,完成启动。
---------
Please answer y or n. Warning: desktop file appears to be in use by PID ????.
Using it may cause conflicts. Use it anyway? (y or n) "
---------
参考了下记帖子后,解决。
(即去掉(desktop-read)项,我还真说不清这项是干什么用的,没读手册和帮助呀)
个人.emacs文件中的内容:
;;;;;;;;;;;session;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;?????? ;(add-to-list 'load-path "") (require 'session) (add-hook 'after-init-hook 'session-initialize);启动时初始化session
;;记录和恢复屏幕 (load "desktop") (desktop-load-default) ;(desktop-read) ;;desktop自动存盘模式,23需要加 (desktop-save-mode 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
GDB:The GNU Project Debugger Ver:7.0.1
HP:
GDB的使用方法就不多说了,网上找找吧。
这里仅介绍他的功能之一:gdb-many-windows
个人.emacs文件中的内容:
;##GDB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key [(f5)] 'gdb-many-windows);gdb-many-windows快捷键[F5] (setq gdb-use-separate-io-buffer t) ; 不需要"IO buffer"时,则设为nil ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
--------------
注:装完GDB 7.0.1 后,GDB不能启动。
错误提示是:
gdb: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
解决方法是(网摘):
在/etc/bashrc 或 ~/.bashrc 或 ~/.bash_profile 等等,位置加入下记:
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
--------------
(是不是GDB安装的路径错了呢!?)
GDB模式启动后,下面的6个buffer将被显示:
+----------------------------------------------------------------------+ | GDB Toolbar | +-----------------------------------+----------------------------------+ | GUD buffer (I/O of GDB) | Locals buffer | | | | | | | | | | +-----------------------------------+----------------------------------+ | Source buffer | I/O buffer (of debugged program) | | | (comint-mode) | | | | | | | | | | | | | | | | | | | +-----------------------------------+----------------------------------+ | Stack buffer | Breakpoints buffer | | RET gdb-frames-select | SPC gdb-toggle-breakpoint | | | RET gdb-goto-breakpoint | | | D gdb-delete-breakpoint | +-----------------------------------+----------------------------------+
|
各buffer的含义如下:
- GDB Toolbar - GDB 操作Toolbar
- GUD buffer - 执行操作的buffer
- Locals buffer - 本地变量名和值的表示buffer
- Source buffer - 表示sourcecode的buffer
- IO/ buffer - 表示程序的输入输出的buffer
- Stack buffer - 运行停止的时候,调用关系的表示buffer
- Breakpoints buffer - breakpoints断点的表示buffer
buffer崩溃的时候、通过'M-x gdb-restore-windows'返回原状态。
gdb-many-windows插图
其他内容:
1.compile
GNU Emacs中有个功能叫compile。
当编辑完源代码后,中输入compile,会跳转执行make -k。
我记得 -k 的意思是,在遇见错误的时候,不停止,继续编译。之后,会有发现错误的个数的表示。
通过快捷键可直接跳转到每个错误的源代码,方便修正错误。
看了《学习GNU Emacs》一书之后,就知道了。
个人.emacs文件中的内容:
;##compile;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-key c-mode-base-map [(f9)] 'compile);emacs的compile命令快捷键F9 (setq compile-command "make");默认的make -k命令,变为make命令 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2.buffer切换
当打开多个buffer的时候,相互之间切换,不要用'M-x o'了。
这种有序的切换方式,太慢了,影响工作效率。
请使用'shift + 光标':就是shift + (↑ ↓ ← →)
.emacs文件中追加
;; move window (Shift + cursor) (windmove-default-keybindings) (setq windmove-wrap-around t) ;;;;;;;;
|
续集:
- Emacs Lisp auto-complie自动编译 + 自动更新gtags
http://blog.chinaunix.net/u3/98822/showart.php?id=2151084 - Emacs显示行号。
http://blog.chinaunix.net/u3/98822/showart.php?id=2151091 - 去掉ecb启动时的'first steps'帮助信息的显示
http://blog.chinaunix.net/u3/98822/showart.php?id=2151592
- 待续
更多 : 个人 .emacs 文件备份
http://blog.chinaunix.net/u3/98822/showart.php?id=2144154
写完了,欢迎指正。
升级autoconf时,同时要升级下面内容:
- is a prerequisite for Autoconf.
- is a prerequisite for Autoconf.
- uses Autoconf.
- also uses Autoconf.
阅读(9450) | 评论(1) | 转发(0) |