Debugging 调试有用吗?

Debugging 调试有用吗?,debugging,Debugging,我已经编程了大约5个月了。我从C++开始,然后是C,最后是java。在这段时间里,我从未在我的编译器上使用过调试功能,也不知道它是做什么的。在课堂上,我至今为止没有被任何调试器(ALTHO类仅仅是C语言启动,我自己学习C++和java)。什么是调试,它做什么?您经常使用它吗?调试的用途是什么?我在谷歌上搜索过调试,但我不太明白。有人能正确解释调试功能吗?据我目前所知,这是一个帮助您查找bug的功能,但我不太了解它的工作原理。调试允许您在代码执行的每个步骤中检查变量的值。这是发现愚蠢错误的好方法。

我已经编程了大约5个月了。我从C++开始,然后是C,最后是java。在这段时间里,我从未在我的编译器上使用过调试功能,也不知道它是做什么的。在课堂上,我至今为止没有被任何调试器(ALTHO类仅仅是C语言启动,我自己学习C++和java)。什么是调试,它做什么?您经常使用它吗?调试的用途是什么?我在谷歌上搜索过调试,但我不太明白。有人能正确解释调试功能吗?据我目前所知,这是一个帮助您查找bug的功能,但我不太了解它的工作原理。

调试允许您在代码执行的每个步骤中检查变量的值。这是发现愚蠢错误的好方法。例如,您可能无法通过一个错误解决此问题:

for (int i = 0; i <= 10; i++)
{
    MethodThatShouldExecuteTenTimes(i);
}

for(int i=0;i调试本身就是一个查找和消除bug的过程,不多也不少。因此,除非你是一个从不犯错误的完美程序员,否则你已经做到了

另一方面,调试器是一种帮助调试的工具。您仍然可以在没有调试器的情况下进行调试,但使用调试器可以为您提供更多的选项和方法

如果您没有特别提到您正在谈论的调试器(Visual Studio one,或gdb,或…),我们就无法真正告诉您如何使用它,但简而言之:

调试器将允许您一次执行一条指令,或一次执行一行代码。它将允许您运行代码,直到您感兴趣的地方,然后停止。当代码停止时,您可以检查变量的值以确保一切正常,在某些情况下,甚至可以在运行时修改内容以测试各种场景

不使用调试器进行调试的一些技术包括:

  • 打印插入,即在代码中插入打印命令,以便在代码运行时跟踪代码的状态
  • 代码阅读,你阅读代码,并试图找出你的意图与实际编写的不同之处
  • 马克杯对话,你试着向你的朋友(或你桌上的一个马克杯或企鹅娃娃)解释你的代码,在这个过程中,看看你的逻辑哪里出错了
  • 二进制剪切搜索,一次删除代码块,查看错误是否仍然存在

还有更多。

如果你编写的程序总是第一次运行,你就永远不需要找到bug

如果程序可以编译,但无法运行,您如何找出哪里出了问题

添加大量的print语句是可行的,但是能够单步执行函数、单步执行它们并检查内存存储确实很有帮助

有人可以说调试就像暴力一样——是残缺者最后的避难所


但有时,我们没有能力避免错误,调试器让生活变得更加美好。

调试是找到代码的过程,而代码并不是你想让它做的。这是一项非常必要的技能,可以有效地完成工作。它可以包括很多事情。包括但不限于:

  • 读取程序生成的日志文件
  • 查看程序通过网络传输的消息
  • 查看程序的输出(例如,网页是否正确显示和操作)
  • 查看异常的堆栈跟踪
  • 使用调试器逐行遍历代码,以便在执行过程中查看特定点上的变量值
调试器不仅可以用于查找程序中的错误。它还可以帮助您了解现有代码的运行方式。您可以在代码中设置断点:一个标记,用于通知调试器停止在该行上执行。然后,从该点开始,您可以逐行逐步检查源代码


为了更好地使用调试器,我建议您在代码中设置一个断点并逐步执行。然后您将确切地看到我和其他人所说的内容。您使用的任何开发环境都应该有关于如何使用附带的调试器的说明。

您可以一步一步地跟踪代码执行。这是用于ul在查找和排除bug方面的经验。谢谢。这对我来说是一个很好的总结。我以前调试过,但没有这个功能。“mug conversations”我以前有一种叫做“专家白痴”技术的变体。朋友们会说,“这个在X爆炸了,我不知道为什么。”我会说,“好的,从头开始。”我会坐下来,强迫他们解释一切,就像我是个十足的白痴一样。大多数时候,他们会在中场休息,停下来,脸红,然后说,“没关系。”如果他们说,“哦,这不可能发生在那里。”我进入斗牛模式,强迫他们捍卫每一个逗号和分号,因为“手划”几乎可以肯定,这意味着他们没有真正看它。