Search code examples
cassemblyprofilinginstructions

Tracing/profiling instructions


I'd like to statistically profile my C code at the instruction level. I need to know how many additions, multiplications, divisions, etc I'm performing.

This is not your usual run of the mill code profiling requirement. I'm an algorithm developer and I want to estimate the cost of converting my code to hardware implementations. For this, I'm being asked the instruction call breakdown during run-time (parsing the compiled assembly isn't sufficient as it doesn't consider loops in the code).

After looking around, it seems VMware may offer a possible solution, but I still couldn't find the specific feature that will allow me to trace the instruction call stream of my process.

Are you aware of any profiling tools which enable this?


Solution

  • I eventually used a trivial yet effective solution.

    1. Configured GDB to display the disassembly of the next instruction (every time it stops) by invoking:

    display/i $pc

    1. Configured a simple gdb script that breaks in the function I need to analyze and proceeds to step instruction by instruction:

      set $i=0
      break main
      run
      while ($i<100000)
      si
      set $i = $i + 1
      end
      quit
      

    2. Executed gdb with my script dumping output into a log file:

      gdb -x script a.out > log.txt

    3. Analyzed the log to count specific instruction calls.

    Crude, but it works...