Debugging 实时调试与脱机调试

Debugging 实时调试与脱机调试,debugging,language-agnostic,Debugging,Language Agnostic,我一直在试图找出这两种调试之间的区别,但在任何地方都找不到(谷歌搜索了将近30分钟),所以我在这里问:实时调试和离线调试之间有什么区别?人们说调试器是“实时”还是“脱机”是什么意思?“联机”调试是正常的过程: 告诉调试器让程序向前走 看看目前的程序状态是什么 为将来设置断点 告诉调试器只运行程序 如果断点“激发”,请立即查看程序状态 “脱机”调试有两种方法: 您可以获取源代码并手动逐步完成处理器应该执行的操作,以查看意外的程序路径 请注意,如果您这样做,您需要努力不“知道”处理器“应该”做什

我一直在试图找出这两种调试之间的区别,但在任何地方都找不到(谷歌搜索了将近30分钟),所以我在这里问:实时调试和离线调试之间有什么区别?人们说调试器是“实时”还是“脱机”是什么意思?

“联机”调试是正常的过程:

  • 告诉调试器让程序向前走
  • 看看目前的程序状态是什么
  • 为将来设置断点
  • 告诉调试器只运行程序
  • 如果断点“激发”,请立即查看程序状态
“脱机”调试有两种方法:

  • 您可以获取源代码并手动逐步完成处理器应该执行的操作,以查看意外的程序路径

    请注意,如果您这样做,您需要努力不“知道”处理器“应该”做什么,而只是这样做:您需要诚实地遵守代码,就像您是计算机一样。通常你会让其他不懂代码的人代替你来做这件事

  • 您获取运行日志的结果(通常由硬件探测器捕获),并使用调试器“事后”运行

  • 后者通常需要一个处理器,该处理器通过一个“跟踪”端口(并非所有端口都具有此功能)和一个连接到跟踪端口的硬件设备(如探测器)来捕获数据。然后,该探测器与调试器通信,调试器获取数据并将其呈现给程序员。程序员可以通过这个跟踪日志前后工作,查看代码实际执行的路径,而不是程序员认为应该执行的代码

    一些处理器不仅传输当前正在处理的指令,还传输在执行此操作时读取或写入的数据。更复杂的调试器可以获取这些额外的数据,并在运行过程中的任何时候提供系统的“快照”,允许程序员分析代码的行为方式

    之所以称为“脱机”,是因为一旦捕获了日志,您就可以断开目标并关闭其电源,并在将来的任何时候查看保存的日志,而不必仍然连接到探测器或处理器。

    调试类型 可以区分以下几种调试方式:

  • 实时调试与事后调试(您称之为“脱机”调试,也称为“转储调试”)
  • 内核调试与用户模式调试
  • 本地调试与远程调试
  • 总共有8种组合

    对于实时调试,您可以区分侵入式调试和非侵入式调试

    实时调试与脱机调试 在实时调试中,程序正在运行,调试器已附加到该程序。这意味着您仍然可以与程序交互。您可以设置断点、处理通常会导致程序终止的异常、修改内存等

    实时调试的缺点是它的时间性/流畅性。如果您输入了错误的命令或步骤太远,则情况将消失,并且可能无法重复

    我提到了实时调试有两个子模式:侵入式调试和非侵入式调试:在非侵入式调试中,调试器不连接到目标应用程序。它挂起程序的所有线程,并可以访问内存、寄存器和其他此类信息。但是,调试器无法控制目标

    在事后调试中,有人在某个时间点捕获了正在运行的程序的内存转储。在许多情况下,这是在发生特定事件时进行的,例如,导致程序终止的未处理异常。由于内存转储是磁盘上的一个文件,您可以随时分析它,得到完全相同的情况


    当然,如果事后调试的缺点是程序没有运行,您无法与之交互,并且很难找出接下来会发生什么。

    您可以通过单击向上箭头向上投票,并通过单击复选标记接受答案,从而获得有用的答案