让自己也惊叹的#emacs##gdb#联动,这才是最好的emacs-gdb
来源:互联网 发布:盼盼食品网络经销商 编辑:程序博客网 时间:2024/06/10 03:59
由于最近在做比较深入的android ndk开发,又不得不和命令行gdb打交道了——eclipse连gdb太慢了!
我觉得在emacs中用gud来操控ndk-gdb一直不妥。所以退而改用命令行方式。
对于bt(backtrace)命令打出来的call stack,一直都是再次从terminal中copy到emacs中查看的。
这天多花了点心思,想用define命令把这个call stack一次性显示到emacs的buffer中。
define不是最好的gdb扩展方法,因为现在有python gdb扩展接口了。只可惜team里的gdb高人没空帮我编译
with-python的gdb。
几番info文档查看,发现巧用logging命令,可以把gdb的内容输出到emacs中,这个简单而又诡异有用的脚本如下:
define gobt set logging file ~/.gdb.btt set logging overwrite on set logging redirect on set logging on bt set logging off shell echo \#Local Variables: \# >> ~/.gdb.btt shell echo \#mode: compilation \# >> ~/.gdb.btt shell echo \#End: \# >> ~/.gdb.btt shell emacsclient -n ~/.gdb.bttend
如果emacs的server启动了,会得到一个可交互的call stack,在哪行拍回车就跳转到相应的调用位置查看代码。
另一个命令更简单:
define eb source ~/.gdb.lineend
它的强大在于和以下emacs lisp配合:
(defun jr-debug-line () (interactive) (let ((fn buffer-file-name) (ln (line-number-at-pos))) (with-temp-buffer (insert (format "b %s:%d" fn ln)) (write-region (point-min) (point-max) "~/.gdb.line")) (kill-new (format "b %s:%d" fn ln))))(global-set-key (kbd "C-c b") 'jr-debug-line)
这样一来,就可以所见即所得地在emacs中对文件下断点了!
最后一个设置是EDITOR环境变量,为了用emacs查看gdb的当前行,正确的设置是:
export EDITOR="emacsclient -n "
这时,ed(it)命令会把你发送到gdb当前frame的当前行。
一个半双工的调试环境完成了。TUI的C-x C-a不够用时,ed就是神器呀。
P.S:上述gobt生成的back trace可以保存到任意位置,随时查看现场。这可比eclipse和intelij强大。
- 让自己也惊叹的#emacs##gdb#联动,这才是最好的emacs-gdb
- emacs,gdb截屏
- emacs中用gdb调试
- Emacs Mode for GDB
- Emacs+GCC+GDB环境
- Emacs和gdb常用命令
- emacs中用gdb调试
- emacs 中使用gdb
- emacs中gdb
- Emacs Mode for GDB
- emacs 中使用 gdb
- emacs gdb调试
- emacs gdb调试
- 程序员的emacs配置大全(cedet+ecb+cscope+gdb-ui)
- 改造Emacs GDB调试的多窗口布局
- emacs下gdb打印 变量 和 数组 的值
- Emacs gdb 配置和使用
- Emacs中学习gdb调试
- 黑马程序员 + 在学习中遇到的一些问题2
- 转:uboot源码分析(下)
- 学术之路
- UVa 550 - Multiplying by Rotation N进制
- Java与设计模式(06)--策略模式
- 让自己也惊叹的#emacs##gdb#联动,这才是最好的emacs-gdb
- 数据结构学习之_循环队列
- JMS入门
- 网页制作中的CSS+DIV:dl,dt,dd分别表示什么意思啊
- 计算几何专项:UVa 10674
- sizeof()用法汇总
- 百度面试-求多个有序数组中前n的最大值
- 初学cpp<类+运算符重载>
- java中判断session即将过期