gpt4 book ai didi

c++ - 使用valgrind获取clock_gettime的汇编代码?

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:03 26 4
gpt4 key购买 nike

考虑以下代码:

#include <ctime>
#include <cstdlib>

int main(int argc, char* argv[])
{
const std::size_t n = argc > 1 ? std::atol(argv[1]) : 65536;
struct timespec tp;
volatile std::size_t x = 0;
for (std::size_t i = 0; i < n; ++i) {
clock_gettime(CLOCK_REALTIME, &tp);
x += tp.tv_nsec;
}
return x;
}

这是一个测试代码,它只调用了 clock_gettimen 次。目前,我正在编译它:

g++ -Wall -Wextra -g -std=c++11 -O3 clock_gettime.cpp -o clock_gettime

我正在分析代码:

valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes ./clock_gettime 100000

但是,valgrind 无法访问clock_gettime 的内部汇编代码,如下所示: clock_gettime asm

如何访问实际执行的汇编代码? (通过使用编译器标志或 valgrind 的其他标志)

最佳答案

How can I access the assembly code that is actually executed?

正在访问在 Valgrind 下实际执行的代码,即:

mov $_NR_clock_gettime, %eax
syscall

Valgrind zaps auxv[] vector 中的 AT_SYSINFO_EHDR,因此 GLIBC 的行为就好像 vdso(和其中的 __vdso_clock_gettime)不存在一样。

关于c++ - 使用valgrind获取clock_gettime的汇编代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50892878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com