0

好的,所以有很多问题,要求“Linux 上的 Visual Studio 等效”或这个问题的变体。(这里这里这里,……)

我想关注一个方面,并询问调试工作流程在不同系统上可能有何不同,特别是 Visual Studio(类似)系统使用的全集成 IDE 方法以及可能更“分离”的面向工具链的方法。

为此,让我介绍一下我认为的“Visual Studio 调试工作流程”的简短描述:

  • 给定一个现有项目
  • 我打开了项目(从用户的角度来看是一个步骤)
  • 我导航到要调试的代码(可能通过搜索我的项目文件,只需打开Find in Files对话框即可。)
  • 我在 (a) 行放了一个断点,只需将光标放在该行并点击F9
  • 我在 (b) 行添加了一个“跟踪点”,在该处添加一个断点,然后更改断点属性,这样调试器就不会停止,而是跟踪局部变量的值。
  • 我点击F5,它会自动编译我的可执行文件,在调试器下启动它,然后我等到 prg 在 (a) 处停止,同时监视 (b) 的输出的跟踪窗口
  • 当调试器最终在 (a) 处停止时,我的屏幕会自动在(一次性预配置窗口)中并排显示以下信息:
    • 当前调用堆栈
    • 最近更改的局部变量的值
    • 加载的模块(DLL)
    • 所有活动断点及其位置的列表
    • 我输入的最后一个监视表达式的监视窗口
    • 用于检查原始内存内容的内存窗口
    • 显示当前寄存器值的小窗口

加上/减去一些特性,这也是我在 Linux 下的 Eclipse/CDT 下所期望的。在使用 VIM、Emacs、gdb/DDD 等进行开发时,如何检索此工作流程和呈现的信息?

这个问题并不是关于某个工具是否有一个特性,而是关于看到开发/调试工作正在使用特性的组合,并且在您的指尖有大量可用的选项,以及在不使用如何访问这些信息完全集成的IDE。

4

1 回答 1

2

我认为您的答案不仅与您使用的软件有关,还与您使用的方法有关。我使用 Emacs 并依赖 TDD 进行大部分调试。当我看到某些事情失败时,我通常会编写测试来填补我(显然)错过的空白,并以这种方式检查每一个期望。因此,每次我使用调试器时,它都会相去甚远。

当我遇到问题时,我有几个选择。在某些情况下,我首先使用 valgrind,它可以立即告诉我是否存在与内存相关的问题,从而无需调试器。它将直接指向我覆盖或删除应该单独保留的内存的行。如果我怀疑比赛条件 valgrind 非常擅长。

当我使用调试器时,我经常在 emacs 中通过 GUD 模式使用它。它会给我一个视图,其中包含堆栈、局部变量、源代码、断点和一个可以命令调试器的窗口。它通常涉及设置几个断点,观察一些内存或一些评估,以及单步执行代码。这很像在 IDE 中使用调试器。GDB 调试器是一个强大的野兽,但我的问题从来没有大到需要调用它的能力。

于 2010-11-11T12:50:37.290 回答