我一直在试图找出这两种类型的调试之间的区别,但是在任何地方都找不到(谷歌搜索了将近30分钟),所以我在这里问:活调试和离线调试之间有什么区别?当人们说调试器是“实时”还是“离线”时,意味着什么?
发布于 2016-06-16 12:13:32
调试类型
有几种调试方法可以区分:
总共有8个组合。
对于实时调试,可以区分入侵调试和非侵入调试。
实时调试与脱机调试
在现场调试中,程序正在运行,调试器被附加到它。这意味着您仍然可以与程序进行交互。您可以设置断点,处理通常会导致程序终止的异常,修改内存等。
实时调试的缺点在于它的时态/流畅性。如果您输入了错误的命令或步骤太远,这种情况就消失了,可能无法重复。
我提到了活调试有两种子模式:侵入式调试和非侵入式调试:在非侵入性调试中,调试器不附加到目标应用程序。它挂起程序的所有线程,并访问内存、寄存器和其他此类信息。但是,调试器无法控制目标。
在死后调试中,有人在某个时间点捕获了正在运行的程序的内存转储。在许多情况下,这是在特定事件上完成的,例如导致程序终止的未处理异常。因为内存转储是磁盘上的一个文件,所以您可以随时分析它,并且得到完全相同的情况。
如果死后调试的缺点是,当然,程序没有运行,您不能与它交互,很难知道接下来会发生什么。
发布于 2016-06-16 09:59:55
“联机”调试是正常过程:
“脱机”调试有两种方法:
后者通常需要一个处理器来传输它正在做的事情--一个“跟踪”端口(并非所有的端口都是这样),以及一个连接到跟踪端口的硬件设备(如探针)来捕获数据。然后,该探测器与调试器通信,调试器接收数据并将其呈现给程序员。程序员可以在这个跟踪日志中来回工作,查看代码实际使用的执行路径,而不是程序员认为应该使用的代码。
有些处理器不仅传输当前正在处理的指令,而且还发送在处理过程中读取或写入的数据。更复杂的调试器可以在运行过程中的任何时候获取这些额外的数据并提供系统的“快照”,允许程序员分析代码为什么会这样做。
之所以称其为“脱机”,是因为一旦捕获了日志,您就可以断开连接并关闭目标,并在将来的任何时候查看保存的日志,而无需连接到探针或处理器。
https://stackoverflow.com/questions/37855644
复制相似问题