记录汇编代码执行

时间:2017-05-29 03:07:29

标签: c++ assembly gdb

我想知道是否有办法记录 汇编代码说明 已执行。这可以使用GDB来实现吗?

1 个答案:

答案 0 :(得分:1)

理论上,将CPU置于单步模式非常容易,并在执行时记录每条指令。实际上,你不能合理地计划这样做超过几秒钟的执行(或者一般订单上的某些事情)。让我们通过一些数学计算来理解为什么。

目前,让我们假设一个地址占用32位。假设一条典型指令平均使用大约2个字节的数据。典型的CPU可能运行在2.5 GHz,每个周期执行大约2条指令。因此,记录单个指令需要大约6个字节的数据。 CPU每秒执行大约50亿次。进行数学计算,这意味着记录一秒钟的执行将需要大约6 * 50亿字节=每秒30千兆字节(每个核心)。

如果我们将其写入RAM,我们可能会期望执行速度比正常情况慢一个数量级,因此执行和记录一秒将需要某些,例如几分钟。然而,当我们用完RAM时(并且以30 GB / s的速度,我们将很快)并且必须将数据写入磁盘,我们的带宽(即使使用相当快的SSD)也会下降很多,因此执行速度很快将匆忙地放弃批次。同样,目前,我(或多或少)假设我们可以完全使用(例如)至少一个核心来收集和记录由另一个核心生成的数据。如果我们想从(例如)四个核心记录数据,数据收集可能会减慢一些,并且(更糟糕的是)生成数据的速率也将增加4倍(因此我们有一个核心要收集120 GB / s)。这显然会变得更加困难。

从那里我们遇到另一个明显的问题:我们要对这个数据做些什么?鉴于我们正在生产的数量,显然最好在执行期间执行尽可能多的处理以找到我们实际关注的数据,而不是仅仅收集所有数据,而不管它最终可能无用。

所有这一切,我不认为gdb真的是这项工作的正确工具。如果你真的坚持这样做(可能是一个糟糕的想法,但......)你几乎肯定想要专门用于处理这项特定工作的代码。