首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时调试与脱机调试

实时调试与脱机调试
EN

Stack Overflow用户
提问于 2016-06-16 09:48:07
回答 2查看 1.8K关注 0票数 1

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

EN

回答 2

Stack Overflow用户

发布于 2016-06-16 12:13:32

调试类型

有几种调试方法可以区分:

  1. 实时调试与死后调试(您称之为“脱机”调试,也称为“转储调试”)
  2. 内核调试与用户模式调试
  3. 本地调试与远程调试

总共有8个组合。

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

实时调试与脱机调试

在现场调试中,程序正在运行,调试器被附加到它。这意味着您仍然可以与程序进行交互。您可以设置断点,处理通常会导致程序终止的异常,修改内存等。

实时调试的缺点在于它的时态/流畅性。如果您输入了错误的命令或步骤太远,这种情况就消失了,可能无法重复。

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

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

如果死后调试的缺点是,当然,程序没有运行,您不能与它交互,很难知道接下来会发生什么。

票数 2
EN

Stack Overflow用户

发布于 2016-06-16 09:59:55

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

  • 告诉调试器让程序向前一步;
  • 看看目前的程序状态是什么;
  • 为未来设置一个断点;
  • 让调试器简单地运行程序;
  • 如果断点“着火”,现在看一看程序状态。

“脱机”调试有两种方法:

  1. 您可以使用您的源代码并手动执行处理器应该做的事情,监视意外的程序路径。 请注意,如果您这样做,您需要努力“不知道”什么处理器是“应该”做的,只是这样做:你需要诚实地遵守代码,就像你是计算机。通常,你会让不懂代码的其他人代替你去做这件事。
  2. 您将获取运行日志的结果(通常由硬件探测捕获),并使用调试器“后置分析”运行。

后者通常需要一个处理器来传输它正在做的事情--一个“跟踪”端口(并非所有的端口都是这样),以及一个连接到跟踪端口的硬件设备(如探针)来捕获数据。然后,该探测器与调试器通信,调试器接收数据并将其呈现给程序员。程序员可以在这个跟踪日志中来回工作,查看代码实际使用的执行路径,而不是程序员认为应该使用的代码。

有些处理器不仅传输当前正在处理的指令,而且还发送在处理过程中读取或写入的数据。更复杂的调试器可以在运行过程中的任何时候获取这些额外的数据并提供系统的“快照”,允许程序员分析代码为什么会这样做。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37855644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档