Debugging 为什么在IDE中调试更好?

Debugging 为什么在IDE中调试更好?,debugging,ide,Debugging,Ide,我已经做了二十多年的软件开发人员,用C、Perl、SQL、Java、PHP、JavaScript和最近的Python编程。我从来没有遇到过一个问题,我无法使用一些仔细思考的、位置良好的调试print语句进行调试 我尊重很多人说我的技术是原始的,在IDE中使用真正的调试器要好得多。然而,据我观察,IDE用户使用我的石刀和熊皮进行调试似乎并没有比我更快或更成功。我真诚地愿意学习正确的工具,只是从来没有人向我展示过使用可视化调试器的巨大优势 此外,除了如何设置断点和显示变量内容的基础知识外,我还从未读

我已经做了二十多年的软件开发人员,用C、Perl、SQL、Java、PHP、JavaScript和最近的Python编程。我从来没有遇到过一个问题,我无法使用一些仔细思考的、位置良好的调试
print
语句进行调试

我尊重很多人说我的技术是原始的,在IDE中使用真正的调试器要好得多。然而,据我观察,IDE用户使用我的石刀和熊皮进行调试似乎并没有比我更快或更成功。我真诚地愿意学习正确的工具,只是从来没有人向我展示过使用可视化调试器的巨大优势

此外,除了如何设置断点和显示变量内容的基础知识外,我还从未读过任何教程或书籍,说明如何使用IDE进行有效调试

我错过了什么?是什么使IDE调试工具比深思熟虑地使用诊断
print
语句更有效

您能推荐一些资源(教程、书籍、屏幕广播)来展示更精细的IDE调试技术吗


甜美的回答!非常感谢大家抽出时间。很有启发性。我投了很多票,没有一票反对

值得注意的是:

  • 调试器可以帮助我对变量、代码或运行时环境的任何其他方面进行特别检查或更改,而手动调试需要我停止、编辑和重新执行应用程序(可能需要重新编译)
  • 调试器可以附加到正在运行的进程或使用崩溃转储,而手动调试则需要“复制”缺陷的步骤
  • 调试器可以以更易读的方式轻松地显示复杂的数据结构、多线程环境或完整的运行时堆栈
  • 调试器提供了许多方法来减少几乎所有调试任务的时间和重复性工作
  • 可视化调试器和控制台调试器都很有用,并且有许多共同的特性
  • 集成到IDE中的可视化调试器还使您能够在单个集成开发环境中方便地访问智能编辑和IDE的所有其他功能(因此得名)
      • IDE调试器允许您更改 运行时变量的值

      • IDE 调试器允许您查看 你不知道你想要的变量 看看什么时候开始执行

      • IDE 调试器允许您查看调用堆栈 并检查 函数传递了奇怪的值。 (假设此函数是从 数百个地方,你不知道 这些奇怪的价值观从何而来 从)

      • IDE调试器允许您 在任意时间有条件地中断执行 代码中的点,基于条件, 不是行号

      • IDE调试器将允许您在出现未处理异常的情况下检查程序的状态,而不仅仅是退出


        • 我已经有近20年没有开发了,但我发现使用IDE/调试器可以:

          • 看到我可能没有想到会包含在打印声明中的所有内容
          • 通过代码查看它是否匹配我认为它将采用的路径
          • 将变量设置为特定值以使代码具有特定分支

          IDE调试器将在代码中为您提供过跟踪消息的一些功能示例:

          • 在任何时间点查看调用堆栈,为当前堆栈帧提供上下文
          • 进入库,您无法为添加跟踪而重新编译库(假设您可以访问调试符号)
          • 在程序运行时更改变量值
          • 编辑并继续-在代码运行时更改代码并立即查看更改结果的功能
          • 能够观察变量,观察它们何时变化
          • 能够跳过或重复代码的部分,以查看代码的执行情况。这允许您在进行理论更改之前测试它们
          • 实时检查内存内容
          • 当抛出某些异常时向您发出警报,即使这些异常是由应用程序处理的
          • 条件断点;仅在特殊情况下停止应用程序,以允许您分析堆栈和变量
          • 查看多线程应用程序中的线程上下文,这可能很难通过跟踪实现(因为来自不同线程的跟踪将在输出中交错)
          总之,print语句(通常)是静态的,如果原始语句不够详细,则需要重新编译以获得附加信息。IDE消除了这种静态障碍,为您提供了一个触手可及的动态工具包


          当我第一次开始编码时,我不明白调试器有什么大不了的,我认为我可以通过跟踪实现任何事情(当然,这是在unix上,调试器是GDB)。但是,一旦您学会了如何正确使用图形调试器,您就不想返回到打印语句了。

          这是我在VS.NET调试窗口中最常用的:

          • 调用堆栈,这也是了解其他人代码的好方法
          • 本地人和手表
          • 即时窗口,基本上是一个C#控制台,还允许我更改变量内容、初始化内容等
          • 能够跳过一行,将下一条语句设置为在其他地方执行
          • 能够将鼠标悬停在变量上,并有工具提示显示它们的值
          总之,它为我提供了执行代码状态的360度视图,而不仅仅是一个小窗口

          从来没有找到一本书教这种东西,但是