emacs gud中的lldb不会更新'up'的源文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了emacs gud中的lldb不会更新'up'的源文件相关的知识,希望对你有一定的参考价值。

我使用https://opensource.apple.com/source/lldb/lldb-69/utils/emacs/gud.elhttps://github.com/ptrv/emacs.d/blob/master/site-lisp/gud-lldb.el,以及在LLVM 3.9.1中使用emacs 24.3和lldb。它可以在断点处停止,并在单独的emacs窗口中将光标显示在正确的源文件中。但是lldb中的'up'/'down'命令仅在lldb emacs窗口中显示新的源代码。没有新的emacs窗口显示新的源代码。

's'/'fin'可以在不同的窗口中显示正确的代码。

这是预期的吗?

答案

我在emacs 25.3.1中与https://github.com/ptrv/emacs.d/blob/master/site-lisp/gud-lldb.el好运。它还有一个优点,就是它不会尝试修补gud.el.我是一个更独立的解决方案。在向上和向下移动堆栈帧时它也无法移动光标但是通过此更改它可以工作:

*** gud-lldb.el.orig    2017-12-11 17:22:08.000000000 -0700
--- gud-lldb.el 2017-11-18 11:52:55.000000000 -0700
***************
*** 64,73 ****
              ;; * thread #1: tid = 0x2e03, 0x0000000100000de8 a.out`c + 7 at main.c:39, stop reason = breakpoint 1.1, queue = com.apple.main-thread
              (string-match " at \([^:
]*\):\([0-9]*\), stop reason = .*
"
                            gud-marker-acc start)
!             ;; (lldb) frame select -r 1
!             ;; frame #1: 0x0000000100000e09 a.out`main + 25 at main.c:44
!             (string-match "^[ ]*frame.* at \([^:
]*\):\([0-9]*\)
"
!                            gud-marker-acc start))
        ;(message "gud-marker-acc matches our pattern....")
        (setq gud-last-frame
              (cons (match-string 1 gud-marker-acc)
--- 70,79 ----
                      ;; * thread #1: tid = 0x2e03, 0x0000000100000de8 a.out`c + 7 at main.c:39, stop reason = breakpoint 1.1, queue = com.apple.main-thread
              (string-match " at \([^:
]*\):\([0-9]*\), stop reason = .*
"
                            gud-marker-acc start)
!       ;; cherry
!       ;; (lldb) frame #1: 0x000000010013e29a sta`sta::PathEnumFaninVisitor::visitFromToPath(sta::Pin const*, sta::Vertex*, sta::TransRiseFall const*, sta::Tag*, sta::PathVertex*, sta::Edge*, sta::TimingArc*, float, sta::Vertex*, sta::TransRiseFall const*, sta::Tag*, float&, sta::MinMax const*, sta::PathAnalysisPt const*) + 986 at /Users/foobar/File.cc:348
!       (string-match "^.*frame.* at \([^:
]*\):\([0-9]*\)
"
!             gud-marker-acc start))
        ;(message "gud-marker-acc matches our pattern....")
        (setq gud-last-frame
              (cons (match-string 1 gud-marker-acc)
另一答案

jjcherry56,你的改变是有效的。而且,既然你找到了它,我将之前的答案从-1推荐为0。

所以,我看了那个三角洲,最后明确做了一个小改动。

特别是,我改变了模式的一部分:

string-match "^[ ]*frame

string-match "^.*frame

它奏效了!

不可否认,gud-lldb.el,^ [] * frame中的“before”模式(来自jjcherry56的delta)比^ frame更接近(这是在原始修改的gud.el中,并且根本不起作用) ,并且该文件覆盖了其他语言调试器)。

因此,修改后的模式现在可以从行的开头到帧,而不仅仅是零个或多个空白。更接近,如果没有,事实上,“那里”(甚至没有考虑线上的多个“框架”实例的边界条件,以及其他深度测试:-)。

jjcherry56,我怀疑有人的原始downvote是因为提及提问者为“nube”,并且缺乏对解释的具体总结(当然不是我,而且可能过多,特别是考虑到你的变化已经优点,但我能理解反应)。

gud-lldb.el肯定更好,因为你说的原因,你的修复现在允许我(和其他人(你也是,Joe C))继续前进(继续能够)调试在Mac上熟练使用emacs / gud。

PS我已经尝试了所有使用gdb的东西(我羡慕所有那些为之工作的人),没有运气,所以这是一个救星。嘿,我实际上可以在深度处设置一个断点,并且M-x lldb在那里停止,并在缓冲区中给出我的箭头(它会弹出)!

以上是关于emacs gud中的lldb不会更新'up'的源文件的主要内容,如果未能解决你的问题,请参考以下文章

Emacs考场配置

在emacs 里使用gdb

Linux emacs考场配置及对拍脚本

使用邪恶键绑定时,emacs 中的 Ctrl+U

如何在 macOS 中更新 lldb

lldb - 如何杀死卡在无限循环中的命令