关于让gdb-mi.el在GNU Emacs 24.3.1中工作的建议

时间:2014-03-28 13:02:26

标签: emacs gdb

问题

我是Emacs新手,并希望尝试使用gdb-mi.el提供的gdb集成的新MI接口。根据我所读到的内容,现在这是执行M-x gdb时使用的默认设置,因此我希望一切都能正常运行。

我正在研究Ubuntu 10.04 LTS。

使用默认的gdb-mi.el,我似乎没有收到与打印到GUD界面的段错误(或调试程序停止的其他原因)相关的消息。使用最新的gdb-mi.el,我得到了消息,但是没有命令提示符来指示命令何时完成执行。

所以我的问题是是否有一个emacs新手可以使用的gdb-mi.el(和相关文件)的修订版来使事情可靠地运行。之前已经提出了类似的问题,例如gud-gdb emacs 24 not workingGetting gdb to work with emacs 24。看起来有建议恢复旧的GDB接口(gdb-ui.el),但我真的希望让基于MI的接口工作。

问题的其余部分包含了我迄今为止所尝试的一些背景信息,希望它可以帮助其他新手在黑暗中磕磕绊绊。

我几乎没有使用过Emacs lisp的经验,所以我可能咬得比我能咀嚼的多,但如果有人愿意提供从哪里开始的建议,我会非常乐意破解。

到目前为止我尝试过的事情

为了让事情顺利进行,我一直在使用一个简单的小程序来引发分段错误,所以我有一些东西需要调试。

#include <cstdio>
#include <cstring>

void doCrash()
{
    memset(0x0,1,1);
}

int main (int argc, const char ** argv)
{
    printf("hello\n");
    doCrash();
    printf("bye\n");
}

我使用'g ++ -g main.cpp'编译了这个,所以我得到了gdb的调试信息。

然后我使用'Mx gdb'通过emacs启动gdb(并运行它:'gdb -i = mi a.out'),然后执行'Mx gdb-many-windows'以获得一个很好的多窗口布局。

问题#1:没有关于击中段错误,断点等的通知

使用默认的gdb-mi.el文件,当我运行程序时,没有消息指示发生了段错误。

(gdb) r
Starting program: /tmp/a.out 
(gdb) c
Continuing.
(gdb) 

有一个关于'Threads'缓冲区窗口中发生的事情的提示,但是在愤怒地调试大型程序时这没有用:

1 process 31800 stopped in main (argc=1,argv=0x7fffffffe3c8) of main.cpp:11

问题#2:没有命令提示符

将gdb-mi.el升级到latest version from github(我事先知道它不太可能完美,因为它可能依赖于其他lisp模块),运行gdb后很快就会丢失提示,但是我做了获取有关segfaults等的消息:

(gdb) r          <--- I still have a prompt here
Starting program: /tmp/a.out 

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff732efd9 in memset () from /lib/libc.so.6
bt               <--- No prompt anymore, but gdb commands work
bt
#0  0x00007ffff732efd9 in memset () from /lib/libc.so.6
#1  0x000000000040066c in doCrash () at main.cpp:6
#2  0x000000000040068c in main (argc=1, argv=0x7fffffffe3c8) at main.cpp:12

缺乏提示可能看起来不是什么大事,但显然不太理想,没有任何迹象表明gdb&amp; emacs已经完成处理,并准备好进行新的输入。

0 个答案:

没有答案