我有点卡在这里。
我的想法是,我想获取程序在执行期间运行的每条指令的文件。我只想用手头的可执行文件(无源代码)来完成它,并且能够确定什么时候在什么地址上发生了什么操作。
例如,我希望能够在 Google Chrome、Firefox 等上运行它。
我想将它用于我正在开发的性能预测系统。我想如果我能够获得按顺序在系统 1 上执行的每条指令,我可以尝试模拟/建模在系统 2 上运行的相同程序的运行时间,因为我将能够预测(虽然我不知道 100% 准确)L1/L2 缓存未命中、L1/L2 缓存命中、TLB 命中/未命中、页面错误、浮点乘法运算花费的时间等。
我想尝试在两个不同的系统上执行此操作:
系统 1:Intel Core 2 Duo CPU 上的 Ubuntu 10.10
系统 2:Ubuntu 12.04,配备 2 个 AMD 十六核皓龙型号 6274 的系统
(我绝对可以根据需要更改操作系统,但如果可能的话我更愿意继续使用 Ubuntu)
这可能吗/我该怎么做?我知道使用调试器,您可以使用它们逐步完成所有操作,但我没有可用的源代码。
最佳答案
我认为,您可以使用 qemu(甚至 bochs)或 valgrind 来监控每条执行的指令。它们是 x86 二进制翻译工具(不包括 bochs——它是 x86 代码的解释器)。有一个名为 cachegrind
(+ kcachegrind gui) 的 valgrind 工具,它可以通过检测每个内存访问和模拟一些 L1/L2 缓存模型(大小可以通过命令行选项配置)来模拟缓存。
要更深入(进入管道),您可能需要查看免费的 ptlsim (http://www.ptlsim.org/)
关于linux - 在ubuntu中监视正在运行的程序的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271051/