The best you can do is to write statements that you think map to certain instructions, and to check every release build to see what instructions the compiler chose.
You also may have to make sure that the buffers you use don’t cross page boundaries.
What you really want is https://github.com/agl/ctgrind or something similar.
And it’s worse: that your code is constant-time in the absence of an adversary doesn’t guarantee that it is so in the presence of one. You will have to stress test your code with code running in other CPU threads that flush various caches, switch CPU modes, do DMA, etc.
Having said that, running with random inputs isn’t a bad idea, if only because you have to get confidence that the CPU manufacturer’s timing data is correct.
Or perhaps it's about avoiding allocations?