通过修改它们来调试程序

2021-04-28 11:16:48

遵循我' m愉快地惊讶地惊讶于,这么多人通过打印进行调试。在谈论它之前,我总是感觉像是一声孤独的声音。伟大的!

但是,这种对话缺少这一点,即关于通过打印特殊调试的原因。它教导的关键技能是通过修改程序来推理程序。在所有深度中与您的程序互动,而不是通过玻璃窗格。

调试周期由编辑,运行,观察。什么时候可能更好的调试工具都是反效率的?如果他们导致你忘记有一个调试周期,并且当新的修改会让您更快地答案时保持太长的观察。

当他们的工具停止工作时,我见过人们。工具将始终有限。一个错误需要数小时的时间,它溢出了RAM。当您必须在后面留下工具并进入荒野时,打印一次准备一次。

@ Akkartik我觉得印刷品在大型项目中失去了有用性,这是针对大型项目的案例:P

@ eris不同意! Prints的值与LOC或团队规模无关。然而,它_can_依赖于运行持续时间。

在我的体验中,打印无法缩放的情况也在其他工具的信封之外。您最终需要构建新工具。 (我真的很喜欢https:// github.com/akkartik/mu/blob/ma在/ tools / browse_trace.readme.md)

@ akkartik我' ve必须处理涉及的处理器最困难的错误之一,该处理器由于堆栈溢出而最终以紧密的循环结束。具有讽刺意味的是,这种行为是预期的,尽管通过更传统的循环而避免。那是一个有趣的!

@ akkartik它' s搞笑因为作为一个菜鸟,通过打印调试已经是最可靠的方式来解决问题,印刷是您在大多数情况下学习将数据脱离该程序的方法。它告诉我我需要知道的一切。什么'从管道下来,它如何与预期结果相比突出,如果没有,那么它在两者之间的点拧紧,然后缩小它。如果输出太大,我只能在截面上使用踩踏部分 -

我猜这取决于你的项目的范围,但踩到经常似乎是冗余的,在每一步向往将打印语句的每一步都持续到一个文件,沿着沿一边的文件,无论您如何数据'重新期待和抓住你的兴趣点并看看出现了什么。

@ akkartik我在这个阵列中寻找16个数字,'要出现。它更容易用印刷和Grep将其用巨大的Blob管出来,而不是单独逐步通过每一行。它告诉我,从字面上告诉我,我需要沿途所需的一切。

@ akkartik为我,它' s只是一个扣除vs观察问题。它'我更快地看到了几个点的印刷状态,而原因发生在发生的事情上,而不是滚动数百个不相关的国家。

不要在他们的头脑中保持程序状态的人愿意观看每一步。

从理论上我可以设置断点,看看相同的状态,但它比少数几个DLOG线条更加努力。