在Emacs 23中使用gdb

7

我正在尝试从Emacs v22.3.1迁移到v23.1.1,在使用gud内置于Emacs的gdb时出现了问题。

当我执行meta-x gdb并输入命令'gdb /my/executable/here'时,窗口可以正常打开,但是在键入gdb提示符下的命令并按回车键执行后,没有任何反应,状态栏显示'Debugger:run',结果也没有显示。我可以输入'ctrl-c ctrl-c'来终止命令并再次获得'(gdb)'提示符,但是另一个命令仍然无法正常执行。

这是Linux Centos v4 32位系统上的gdb v6.8。

有人遇到过类似的问题吗?该如何解决?

我从提示符(而不是gud)附加到了gdb,并获得了以下堆栈跟踪:

#0  0x00fd77a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1  0x0020108d in poll () from /lib/tls/libc.so.6
#2  0x08111a07 in gdb_do_one_event (data=0x0) at event-loop.c:759
#3  0x0810f05f in catch_errors (func=0x8111970 <gdb_do_one_event>, func_args=0x0, errstring=0x8236200 "", mask=6) at exceptions.c:513
#4  0x080c25e7 in tui_command_loop (data=0x0) at .././gdb/tui/tui-interp.c:153
#5  0x0810f2cf in current_interp_command_loop () at interps.c:276
#6  0x0807f0b3 in captured_command_loop (data=0x0) at .././gdb/main.c:99
#7  0x0810f05f in catch_errors (func=0x807f0a8 <captured_command_loop>, func_args=0x0, errstring=0x8236200 "", mask=6) at exceptions.c:513
#8  0x0807f7eb in captured_main (data=0xbff00a60) at .././gdb/main.c:882
#9  0x0810f05f in catch_errors (func=0x807f0e0 <captured_main>, func_args=0xbff00a60, errstring=0x8236200 "", mask=6) at exceptions.c:513
#10 0x08080027 in gdb_main (args=0x7fffffff) at .././gdb/main.c:891
#11 0x0807f0a1 in main (argc=-4, argv=0xfffffffc) at gdb.c:33
#12 0x00153df3 in __libc_start_main () from /lib/tls/libc.so.6
#13 0x0807efdd in _start ()
2个回答

11

我猜测:

Emacs 的 gud-mode 要求在运行 gdb 时启用注释,以便它可以正确解析输出。当重新编写按下 M-x gdb 后 Emacs 默认显示的行时,我曾经被这个问题所困扰。请确保在 gdb 命令行中包含 "--annotate=3",看看是否有所帮助。


是的,--annotate=3 是默认存在的。 - WilliamKF
2
我在emacs-23.1中使用gdb没有任何问题。如果您使用M-x gud-gdb命令进入文本模式而不是图形模式,会发生什么?请确保不要从gdb命令行中删除--fullname选项。 - Nate
那么M-x gdb不再受支持了吗?我用M-x gud-gdb替代它会有什么损失吗? - WilliamKF
M-x gdb 仍然受支持,我一直在使用。您的问题表明未打开注释( gdb 命令行上的 --annotate=3)。使用 gud-gdb 您将无法在emacs中获得 gdb 的 “可视” 功能。这包括“gdb 多窗口模式” 中的专用堆栈和本地变量缓冲区等内容。也许您的emacs配置中有某些东西正在破坏可视模式,请尝试使用“-q”开关启动emacs以防止加载您的配置文件。 - Nate
是的,当我使用“-q”启动Emacs并将“--annotate=3”传递给gdb时,我遇到了相同的问题。 - WilliamKF

1

我在emacs-23中使用了gdb...至少,我比你走得更远了...当我尝试时,堆栈窗口没有更新...最终我做的是使用emacs-23进行编辑(因为抗锯齿字体很好看),但是使用emacs-22进行调试...你可以同时安装两个版本...


是的,我正在运行两个实例,但我希望只运行一个,因为拥有统一的系统比在两个emacs可执行实例之间分割更有效率。 - WilliamKF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接