相关疑难解决方法(0)

跟踪/分析说明

我想在指令级别对我的C代码进行统计分析.我需要知道我正在执行多少次加法,乘法,除法等.

这不是您通常的磨码分析要求.我是算法开发人员,我想估算将代码转换为硬件实现的成本.为此,我被问到运行时的指令调用故障(解析编译的程序集是不够的,因为它不考虑代码中的循环).

环顾四周后,似乎VMware可能提供了一个可能的解决方案,但我仍然找不到能够跟踪我的进程的指令调用流的特定功能.

你知道任何能够实现这一目标的分析工具吗?

c assembly profiling instructions

13
推荐指数
3
解决办法
4054
查看次数

如何在GDB中运行记录指令历史和函数调用历史记录?

(编辑:根据当前"技巧"下面的第一个答案似乎是使用Atom处理器.但我希望一些gdb专家可以回答,如果这是一个基本的限制,或者是否在路线图上增加了对其他处理器的支持?)

反向执行似乎在我的环境中工作:我可以反向继续,查看合理的记录日志,并在其中移动:

(gdb) start
...Temporary breakpoint 5 at 0x8048460: file bang.cpp, line 13.
Starting program: /home/thomasg/temp/./bang 

Temporary breakpoint 5, main () at bang.cpp:13
13    f(1000);
(gdb) record 
(gdb) continue 
Continuing.

Breakpoint 3, f (d=900) at bang.cpp:5
5     if(d) {
(gdb) info record 
Active record target: record-full
Record mode:
Lowest recorded instruction number is 1.
Highest recorded instruction number is 1005.
Log contains 1005 instructions.
Max logged instructions is 200000.
(gdb) reverse-continue 
Continuing.

Breakpoint 3, f (d=901) at bang.cpp:5
5     if(d) …
Run Code Online (Sandbox Code Playgroud)

gdb reverse-debugging

9
推荐指数
1
解决办法
3893
查看次数

使用 intel pintool 记录所有指令

我写了这个pintool:

#include "pin.H"
#include <iostream>
#include <fstream>

VOID Instruction(INS ins, VOID *v)
{
        cout << INS_Disassemble(ins) << endl;
}

VOID Fini(INT32 code, VOID *v)
{
        cout << "Fin" << endl;
}

int main(int argc, char *argv[])
{
    if( PIN_Init(argc,argv) )
    {
            cout << "Erreur PIN_Init" << endl;
            return 0;
    }

    INS_AddInstrumentFunction(Instruction, 0);
    PIN_AddFiniFunction(Fini, 0);
    PIN_StartProgram();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在打印所有说明。我现在要做的是显示指令地址(EIP)

我怎样才能做到这一点 ?

谢谢

intel-pin

5
推荐指数
1
解决办法
2160
查看次数