求助:Emacs里键盘绑定gdb命令怎么无效?(已解决,勿入!)

Vim、Emacs配置和使用
回复
头像
zwdnet
帖子: 348
注册时间: 2010-06-09 15:22

求助:Emacs里键盘绑定gdb命令怎么无效?(已解决,勿入!)

#1

帖子 zwdnet » 2010-09-03 12:26

Ubuntu10.04,emacs23.1,我想把gdb里单步执行的一些命令在emacs里绑定成一个键,参考http://emacser.com/emacs-gdb.htm里,如下
4.3 单步执行、运行到光标处

在调试中最常用的功能就是单步执行了。单步执行有两种:将函数调用作为一条语句执行(Next)和遇到函数时进入函数中进行调试(Step)。

要使用第一种方式,默认快捷键是C-x C-a C-n,对应命令为gud-next。也可以单击工具栏上的 。

第二种方式的默认快捷键是C-x C-a C-s,对应命令为gud-step。也可以单击工具栏上的 。

如果想跳出当前函数,可以使用命令gud-finish,默认快捷键为C-x C-a C-f,工具栏上有 可用。

在Emacs中还可以运行到光标所在的行。使用命令gud-until即可,默认快捷键为C-x C-a C-u。1

也可以直接把当前语句指示器拖到任意一行,程序会运行到那一行再停下来。
我想把gud-next绑定为F6,gud-step绑定为F7,gud-finish绑定为F8,在~/.emacs里加入如下内容:

代码: 全选

;;C/C++语言编辑策略**********
(defun my-c-mode-common-hook()
   (setq tab-width 4 indent-tabs-mode nil)
   ;;饥饿删除(hungry-delete)和自动新行
   ;;(c-toggle-auto-hungry-state 1)
   ;;按键定义
   (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding)
   (define-key c-mode-base-map [(return)] 'newline-and-indent)
   (define-key c-mode-base-map [(f9)] 'compile)
   (define-key c-mode-base-map [(f10)] 'gdb)
   (define-key c-mode-base-map [(meta \`)] 'c-indent-command)
   ;;gdb键盘绑定
   (define-key c-mode-base-map [(f6)] 'gub-next) ;下一语句
   (define-key c-mode-base-map [(f7)] 'gub-step) ;进入函数
   (define-key c-mode-base-map [(f8)] 'gub-finish) ;跳出当前函数
   ;;预处理设置
   (setq c-macro-shrink-window-flag t)
   (setq c-macro-preprocessor "cpp")
   (setq c-macro-cppflags " ")
   (setq c-macro-prompt-flag t)
   (setq hs-minor-mode t)
   (setq abbrev-mode t)
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
可以看到,我还把F9绑定为编译,F10绑定为调试,这两个都能用,但是当gdb已经停在我设的断点上时,按F6,F7,F8结果都是"<F6> is undefined"之类的提示,直接按C-x C-a C-s等命令是正常的。请问是定制的时侯哪里错了吗?谢谢。
上次由 zwdnet 在 2010-09-03 12:44,总共编辑 1 次。
您好,请多关照!
头像
zwdnet
帖子: 348
注册时间: 2010-06-09 15:22

Re: 求助:Emacs里键盘绑定gdb命令怎么无效?

#2

帖子 zwdnet » 2010-09-03 12:43

晕,抱歉,解决了,文章下面就有,不好意思。 :em02

代码: 全选

;gdb按键绑定
(add-hook 'gdb-mode-hook '(lambda()
			    (define-key c-mode-base-map [(f5)] 'gud-next)
			    (define-key c-mode-base-map [(f6)] 'gud-step)
			    (define-key c-mode-base-map [(f7)] 'gud-finish)
			    (define-key c-mode-base-map [(f8)] 'gud-until)))
您好,请多关照!
回复