debugging - 什么是调试器以及它如何帮助我诊断问题?

标签 debugging language-agnostic

这是一个通用问题,旨在帮助那些遇到程序问题但不知道如何使用调试器来诊断问题原因的新程序员。

这个问题涵盖三类更具体的问题:

  • 当我运行我的程序时,它不会根据我提供的输入产生我期望的输出。
  • 当我运行程序时,它崩溃并给我一个堆栈跟踪。我有examined the stack trace ,但我仍然不知道问题的原因,因为堆栈跟踪没有为我提供足够的信息。
  • 当我运行我的程序时,它由于segmentation fault而崩溃。 (SEGV)。

最佳答案

调试器是一个可以在程序运行时检查程序状态的程序。 technical means it uses for doing this对于理解使用调试器的基础知识来说不是必需的。您可以使用调试器在程序到达代码中的特定位置时停止执行程序,然后检查程序中变量的值。您可以使用调试器非常缓慢地运行程序,一次运行一行代码(称为单步),同时检查其变量的值。

使用调试器是一项预期的基本技能

调试器是一个非常强大的工具,可以帮助诊断程序问题。并且调试器可用于所有实用的编程语言。因此,能够使用调试器被认为是任何专业或爱好者程序员的基本技能。使用调试器您自己被认为是基本工作,您应该您自己在向其他人寻求帮助之前完成。由于该网站是针对专业和爱好者程序员的,而不是帮助台或指导网站,因此如果您对特定程序的问题有疑问,但尚未使用调试器,那么您的问题很可能会被关闭并被否决。如果您坚持提出这样的问题,您最终将被禁止发布更多内容。

调试器如何帮助您

通过使用调试器,您可以发现变量是否具有错误的值,以及程序中何处其值更改为错误的值。

使用单步执行,您还可以发现控制流程是否符合您的预期。例如,if 分支是否在您期望的时间执行。

使用调试器的一般注意事项

使用调试器的细节取决于调试器,并且在较小程度上取决于您正在使用的编程语言。

  • 您可以将调试器附加到已在运行您的程序的进程。如果您的程序卡住了,您可以这样做。

  • 实际上,从一开始就在调试器的控制下运行程序通常更容易。

  • 您可以通过指示源代码文件和应停止执行的行号,或者通过指示方法/函数的名称来指示程序应在何处停止执行。程序应该停止(如果您想在执行进入方法后立即停止)。调试器用来导致​​程序停止的技术手段称为断点,这个过程称为设置断点

  • 大多数 modern debuggers are part of an IDE并为您提供一个方便的 GUI 来检查程序的源代码和变量,并提供一个用于设置断点、运行程序和单步执行的点击界面。

  • 使用调试器可能非常困难,除非您的程序可执行文件或字节码文件包含调试符号信息以及对源代码的交叉引用。您可能必须compile (or recompile) your program slightly differently以确保信息存在。如果编译器执行大量优化,这些交叉引用可能会变得困惑。因此,您可能必须recompile your program with optimizations turned off .

关于debugging - 什么是调试器以及它如何帮助我诊断问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385173/

相关文章:

algorithm - 拓扑排序

model-view-controller - MVC : pass model/model data to a view from a controller?

c - 如何观察一个变量?

java - Hibernate.initialize(...) 的问题我得到了 LazyInitializationException 但当我调试时一切都很好

debugging - 禁用右键单击时如何检查chrome中的元素?

language-agnostic - 在命名 bool 返回类型的方法时是否使用时态?

algorithm - 如何确定上下文相关的同义词?

debugging - 崩溃后查看内核日志

C 文件读取,空白/空行

data-structures - 纯链表、链表和双链表 : When and Why?