为什么不教导学生使用调试器?

25 debugging

SO 上有很多功课问题.

我猜想可以通过在调试器中单步执行代码并观察程序/变量状态来解决90%以上的问题.

我从未被教过使用调试器.我只是打印并阅读了GDB手册并逐步完成了他们的示例.当我第一次使用Visual Studio时,我记得想,哇!这可以多么简单,单击设置断点,鼠标悬停在变量上的值,按键步骤,立即窗口,debug.print等...

无论如何,学生是否"被教导"使用调试器?如果没有,为什么不呢?(或许更好的问题是,为什么他们不能学会自己使用调试器......也许他们需要被告知有这样的工具可以帮助他们......)

学习使用调试器需要多长时间?

Meh*_*ari 27

我不认为问题在于教学.使用现代图形调试器并不是火箭科学(至少不适用于在单台计算机上运行的大多数用户模式程序).问题在于一些人的态度.为了有效地使用调试器,您应该:

  • 承认这是你的错,select并没有被打破.
  • 有坚持不懈地花几个晚上调试,而不会忘记前一点.
  • 没有具体的算法可供遵循.你应该从所看到的内容中进行有根据的教育和有效推理.

没有多少非程序员有这些态度.在大学期间,我见过许多朋友在相对​​较短的时间内放弃并给我带来一些代码并告诉我计算机出错了.我经常告诉他们我比他们更信任他们的电脑(这会伤害一些感情,但就是这样).

  • 是; 我从赌注中赚到了很多钱,比如"我敢打赌5美元GCC没有被打破".在输掉赌注之后,大多数人都不会重复这个错误. (6认同)
  • 实际上,有一种算法......它被称为科学方法.你观察,发现一些不符合期望的东西,形成一个可能导致它的假设,测试你的假设,比较期望,泡沫,冲洗重复. (6认同)
  • 对于我见过的一些"开发人员"来说,第1点肯定是最难的.咩. (2认同)
  • @Chris你想赌GCC的好事,而不是1.2/1.3天的javac,否则你可能没有那么好. (2认同)
  • 我无法理解任何人都不会认为这是他们的错.他们编写了代码,编译器适用于其他所有人,代码怎么可能无法正常执行? (2认同)

Tyl*_*ith 7

在我的高中和大学里,课堂上的大多数人根本不关心编程.


dan*_*ben 5

如果说学生是计算机科学专业的学生,​​我认为答案是显而易见的。课程的主题通常是理论,并以编程语言/框架/库为辅助。教授不能对某个特定工具进行深入研究,因为这将使他从教网络或系统等方面的时间中解脱出来。也许如果有一门名为“真实世界编程”的课程或类似的课程,他们会介绍调试器,但是总的来说,我期望学生阅读语言/工具文档以完成课程工作并没有太大的错。 。


mba*_*ett 5

如果我没记错的话,调试器是在我的第二年Intro to C课程中介绍的.当然,大多数学生在这一点上都在努力解决的问题是让他们的工作进行编译,这是调试人员无法帮助的.一旦他们的十行命令行程序编译然后崩溃,那么他们已经有了一些printfs.争取掌握GDB是过度的.

根据我的经验,实际上处理一个足够大的代码库是非常罕见的,因为它不仅仅是粗略地熟悉一个调试器,而且值得投入大多数Comp.科学课程.程序很小,您遇到的问题更多的是找出算法的时空复杂性.

调试器在现实世界的项目中变得更有价值,在这些项目中,你有不同的人在不同的时间编写了大量的代码来跟踪,以找出在调用bar()之前保持froo的foo.


Bry*_*der 0

在高中时,我们被教导通过将内容写入控制台来进行调试。

在大学里,我们学习了这些知识以及调试器的使用。

这些工具变得更容易使用,所以我真的不确定为什么不教授它。