Questions tagged «debugging»

调试是发现和减少计算机程序中的错误或缺陷数量的有条理的过程。

9
使用Emacs作为功能齐全的C / C ++ IDE
我一直在尝试使用Emacs作为C / C ++ IDE超过一年了。到目前为止,我仅取得了一点点成功,但是在此过程中遇到了一些障碍。目前,我正在尝试使用CEDET,但是我在理解如何有效使用它方面花费了一些时间。 我正在IDE中寻找的功能如下: 管理软件“项目”。我希望我的IDE对组成当前项目的所有文件有所了解,以便我可以在项目中执行诸如搜索和替换之类的功能。(如果我也能做到这一点,而又不会在源代码树上堆满很多支持文件,那将是很好的选择。为什么每个项目需要一个以上的集中项目文件?) 不管我当前正在访问哪个缓冲区,都可以从IDE中构建当前项目。我需要能够绑定将构建当前项目的密钥。 错误报告。我不想读取500多行输出来查找构建工具报告的错误。优选地,错误显示在它们自己的缓冲区中,每个错误一行。 了解项目中的符号及其定义位置。我想跳转到符号定义,无论它位于我的项目文件中还是位于系统包含文件中。 视觉调试。我想要一个局部变量的监视列表,这些列表会在我逐步执行代码时自动更新。我希望能够在代码中设置断点,看看接下来将执行哪一行代码。 我知道每个功能都是存在的,因为我已经使用EDE,Semantic,GDB等使它们同时或同时工作。问题是我无法同时使所有这些功能同时工作。 ,因为通常每个部分都必须自己配置,并且要弄清楚如何一次配置所有部分并使它们一起工作通常是一项繁重的工作。 有哪些解决方案可以将Emacs变成功能齐全的C / C ++ IDE? 您是否总是必须零碎地配置所有内容,或者是否可以一次设置所有功能? 编辑:这个问题的一个很好的答案不必完全满足所有给定的五个标准。我只是提供了清单,以便在我认为IDE是“功能齐全的”之前,更具体地了解我想看到的功能类型。CEDET很可能符合要求,但我尚未找到有关如何从头开始进行设置的逐步指南。

2
调试冻结的Emacs
我正在用mew收发电子邮件。我需要在SMTP的电子邮件提供商中使用TLS。但是,当我尝试调用它时,Emacs冻结。 我想借此机会进一步了解Emacs软件包。我将如何调试此问题?是否有某种内置调试器,例如Common Lisp?我可以使用日志记录吗?

1
如何解决Emacs问题?
在Emacs表现不理想的情况下,我该怎么做才能解决问题?我可以采取哪些步骤自己找到并解决问题? 或者,如果失败,我如何收集有用的信息,以便此处的人(或在邮件列表或其他论坛上)可以帮助我解决问题? 我的Emacs包含许多程序包,从Internet上复制并粘贴(或杀死并重载)的摘要的集合,以及我自己的自定义elisp,其中一些我不记得写或不再理解。有没有办法弄清楚所有这些并发症?

1
进行中断评估并在emacs-lisp调试器中观察当前堆栈?
如果某些emacs-lisp函数(例如主模式钩子)花费的时间比预期的要长,我有时想中断它并查看当前堆栈。理想情况下,我还希望能够在调试器中查看变量值,等等。我不是在谈论我故意在emacs-lisp模式下执行的代码,而是在emacs的正常操作中执行的代码。 如何直接在emacs中中断emacs-lisp代码的执行?我不知道我需要调试哪个功能。 例如,键入C-g,虽然它中断执行,但也告诉我什么功能被中断。
17 elisp  debugging 

1
如何调试emacs崩溃?
我正在调试为什么使用软件包1中的函数时emacs崩溃。此调试过程的目的是获得有用的数据以使用提交M-x report-emacs-bug。 为了获得有关如何调试emacs崩溃的帮助,我已经查看了Emacs手册-崩溃和Emacs手册-崩溃后,但是它们没有帮助。 “ 崩溃后的故障”手册指的是,emacs-buffer.gdb但我不知道如何使用它。在向Google寻求帮助时,我遇到了这个emacs.SE问题,并使用-ggdb3标志重新编译了emacs 。 我没有使用gdb过的经验,因此尝试使用该emacs-buffer.gbd文件的尝试很少。 这是我尝试过的: gdb -x /path/to/emacs-buffer.gdb gdb -> file /path/to/emacs-buffer.gdb gdb -> source /path/to/emacs-buffer.gdb source /path/to/emacs-buffer.gdb 附带一提,使用该-ggdb3标志编译的emacs 加载时间大约需要10秒;之前是5-6秒,现在是16-17秒。我知道确切的秒数,因为有代码可以在我的init中进行计算。启动时间会增加吗? 脚注1:undo-tree尝试恢复特定.org文件(我无法公开共享)的撤消历史记录时,emacs始终崩溃。我有(setq undo-tree-auto-save-history t)。此崩溃仅发生在emacs git master上,而不发生在emacs 24.5上。在emacs 24.5上,undo-tree抛出一个错误,指出它无法加载撤消历史记录(即使存在撤消历史记录文件也是如此),但是至少emacs会话不会在该版本上崩溃。
16 debugging  gdb 

3
错误显示行号
假设emacs引发了一些我不理解的错误。也许错误提示“符号的变量值无效:模式”,但是modes代码中出现了很多符号,因此我需要一些上下文。可以将Emacs配置为提及lisp代码的行号,以便我知道是什么代码导致了错误吗? 我尝试这样做(setq stack-trace-on-error '(buffer-read-only))并运行了永久代码,以获取堆栈跟踪。也没有堆栈跟踪。 我也尝试过调用edebug-defun我的函数并逐步执行它。直到我退出该函数后,才会引发错误。 (对于开发elisp的一般调试技能,我对当前遇到的特定错误的原因确实不那么感兴趣。请提供有关如何从行号,sexp或堆栈跟踪中获取信息的建议)错误。)

2
如何取消`edebug-defun`?
我如何撤消的影响edebug-defun?换句话说,edebug当调用特定功能时,如何取消导致进入调试模式的指令? 另外,我真的很想知道这个问题的答案在文档中。我所寻找的时间比人们认为必要的时间长得多...
13 debugging  edebug 

1
以编程方式从错误中获取回溯
如果在Emacs Lisp代码中以表示错误,并且debug-on-error为t,则我将获得一个回溯缓冲区,可以很容易地找出发生错误的位置。但是,对于异步处理来自网络的响应时发生的错误,弹出回溯缓冲区会很烦人,所以我宁愿捕获错误condition-case并记录下来。 因此,当我处理中的错误时condition-case,是否有办法在错误发生时访问回溯?调用该backtrace函数将获取处理程序内部代码的回溯,这不是我想要的。 (condition-case e (do-something-that-might-fail) (error (message "%s" ;; This gets the wrong backtrace! (with-temp-buffer (let ((standard-output (current-buffer))) (backtrace) (buffer-string))))))

1
查找警告的起源
我运行了一条命令,并在迷你缓冲区中收到警告。 确切的警告是comint-completion-at-point failed to return valid completion data,当我在Windows中自动完成命令后shell-mode。 如何确定警告的明确来源?
11 debugging 

1
如何找出从(backtrace / stacktrace)调用函数的位置?
我遇到了一个问题,即区域被停用(在瞬态标记模式下)。该函数deactivate-mark被调用,我想知道从哪里(以及为什么)调用它。 我尝试了一下M-x debug-on-entry RET deactivate-mark,但它停止了,但是我找不到找到呼叫者的方法。整个显示的堆栈跟踪为: Debugger entered--entering a function: * deactivate-mark() 我尝试过,M-x edebug-eval-defun但是Edebug也不显示调用方。 我如何找出为什么(从哪里)deactivate-mark被调用?我正在寻找backtrace或stacktrace的功能。 编辑: 一个advice-add窍门: (defun message-show-backtrace () (message "%s" (backtrace-frame 10))) (advice-add deactivate-mark :before #'message-show-backtrace) nil在产生*Messages*。 编辑:有关更多信息deactivate-mark:http : //emacshorrors.com/posts/deactivate-mark.html

1
如何调试标记和字体锁定期间的错误
当进程前哨内部或字体锁定期间发生错误时,即使debug-on-error先前已启用,Emacs也不会显示回溯。 我了解为什么会捕获这些错误,在尝试显示回溯时可能会再次触发相同的错误。但是,当我想实际调试该错误时,它并不是很有帮助。我宁愿冒着Emacs变得反应迟钝的风险,而不必这样做: error in process sentinel: Wrong type argument: stringp, nil 毕竟,如果第一个实例开始变得疯狂,我可以开始第二个实例。从理论上讲,在很多地方可能发生此类错误的情况,多一点上下文将有所帮助。 那么,即使在debug-on-error没有影响的情况下,我如何强制Emacs显示回溯?
10 debugging 

2
导航到内置函数和变量的源代码
在一天当中,我经常使用C-h f或C-h v(describe-function和describe-variable)查找有关函数和变量的文档。如果我没有获得所需的全部信息,通常会单击以下文件末尾的文件链接: some-random-command is an interactive compiled Lisp function in `some-mode.el'. 并导航到源代码。这适用于已安装的软件包,但似乎不适用于内置软件包。例如,在命令的帮助页面顶部,describe-function我得到的是: describe-function is an interactive compiled Lisp function. 没有链接到源代码。有什么方法可以快速导航到内置包的源代码? 我知道我可以在中找到源代码,例如,/usr/share/emacs/24.5/lisp并提出了多种方法来快速访问该目录,但是我很好奇是否有一种快速简便的方法可以导航到内置函数/变量定义中。源代码。谢谢!

1
如何使用调试符号编译emacs?
我在遍历gdb中的emacs源代码时遇到了麻烦。我想我缺少调试符号。 根据https://stackoverflow.com/a/4298982/2752242的建议,我尝试了: ./configure CFLAGS="-ggdb3 -O0" CXXFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" --with-gif=no --prefix=$HOME/local/apps/emacs-24.4/ 但是,那没有用。 是否有关于使用调试符号进行编译的说明?谢谢!
9 debugging 

2
更好的调试崩溃的Emacs?
虽然从Finder启动Emacs(24.3.93.1)可以正常运行,但是如果启动了终端版本,则: /Applications/Emacs.app/Contents/MacOS/Emacs -nw Emacs崩溃: Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw。 看来问题是由init.el中的一行引起的, (set-face-attribute 'default nil :font "Menlo-16") 如果将该行注释掉,则Emacs的终端版本也将正常启动。 为了查明崩溃原因,我花了几个小时(将init.el减少一半)。 我知道,无论如何,Emacs都将继承终端应用程序中指定的任何字体和字体大小(基本上,该行在cli中没有意义。) 一般来说,是否有更好的方法来调试崩溃的Emacs?也许使用某种cli调试器可以打印出更具描述性的消息? 为什么该行通过cli导致Emacs崩溃,但如果不是从Finder启动则不会崩溃?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.