emacs java编译_在Emacs调试JAVA程序,使用GUD模式

很早以前就配置了在GUD模式下条用GDB调试C/C++程序。

GUD其实是支持非常多的调试器的,但是功能只有GDB(即调试C/C++)的时候比较强大。

GDB的设置可以参考:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

以下的配置是调试JAVA程序,用的也是GUD模式,是调用JDB实现的。

而非JDEE或者其他为Emacs制作的IDE环境(我嫌那种模式太烦了,而且我没办法在win和linux共享配置)。

在调试之前,编译的使用要加-g 参数,开启调试模式

实例:javac test.java -g

要开始调试需要用

M-x jdb

然后输入(XXX为要调试的class文件,不用带后缀名)

jdb XXX

这样就可以进入jdb-mode了

可以通过指令进行操作

gud-run 开始运行程序(直到遇到断点)

gud-cont 继续运行程序(第一次要使用gud-run 之后要使用 gud-cont)

gud-print 查看对象内容,和jdb的dump不太一样

gud-break 设置断点

gud-remove 清除断点

gud-next 下一行(跳过函数)

gud-step 步入(进入函数)

gud-finish 跳出函数

它默认有一些快捷键但是都太烦了,我都该成自己的了,下面有配置

JDB和GDB不太一样,没有提供gud-go的现成方法,但是我自己写了个函数吧gud-run和gud-cont 统一了一下。

(defun jdb-run-cont ()

"run/continue java program."

(interactive)

(save-excursion

(if jdb-need-run

(progn

(gud-run nil)

(setq need-run nil))

(gud-cont nil)

))

)

在进入jdb模式的时候设置了一个jdb-need-run的全局变量

(add-hook 'jdb-mode-hook '(lambda ()

(setq jdb-need-run t)

(global-set-key [(f4)] 'gud-kill)

(global-set-key [(f5)] 'jdb-run-cont)

(global-set-key [(f7)] 'gud-print)

(global-set-key [(f8)] 'gud-remove)

(global-set-key [(f9)] 'gud-break)

(global-set-key [(f10)] 'gud-step)

(global-set-key [(f11)] 'gud-next)

(global-set-key [(f12)] 'gud-finish)

(split-window-horizontally)

(tabbar-backward-group)

))

这里有一个gud-kill也是一个自定义的函数,用于删掉debug的进程,(这个和GDB模式下的一样)

(defun gud-kill ()

"Kill process."

(interactive)

(with-current-buffer gud-comint-buffer (comint-skip-input))

(kill-process (get-buffer-process gud-comint-buffer)))

还有几个问题,希望以后有时间能解决它

1、下断点的时候没法想在GDB模式下载fring侧边栏显示一个小红点的表示

2、因为没有侧边栏的小红点,就暂时没有现成的方法可以把设置断点和清楚断点绑在同一个快捷键上(GDB的实现是通过判断侧边栏有没有位图实现的)

3、没有一个好的可以实时更新的watch窗口

4、因为gud.el是内置在Emacs程序里面的,所以没办法改源代码,暂时不知道要怎么把jdb dump命令也绑定到gud命令上

Emacs 就是一个坑,一个永远挖不完坑。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值