gpt4 book ai didi

Linux/C : how to trace the accesses on a number of variables

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:22 27 4
gpt4 key购买 nike

我正在尝试分析一些现有的 C 代码,这些代码使用具有许多成员的大型结构,目的是将其重构为一个较小的缓存友好核心结构,其中包含最常访问的成员和指向较冷数据的指针。

我想想出一种方法,在几个用例中监控应用程序几个小时,并生成一份报告,说明结构实例中每个成员的访问频率。

x86 调试寄存器是理想的,但不幸的是我只能同时观察 4 个地址,我需要更多。

我想我可以暂时让每个成员占据自己的整个页面,将所有页面标记为不可访问,然后设置一个段错误处理程序来记录每次访问,然后以某种方式(这是棘手的一点)恢复并允许该应用程序继续。没有任何被监视的内存被传递给系统调用,因此系统调用不会因不可读的参数而失败。有没有办法使用处理程序暂时使页面可访问,执行错误指令,重新保护页面,然后返回?

如果做不到这一点,是否有更明智的方法来记录对许多地址的访问?也许是在 valgrind 里?谢谢

最佳答案

I was thinking I could temporarily make each member occupy a whole page of its own,

这只适用于堆分配的对象,这就是 Electric Fence使用。过去,我发现 Electric Fence 开销太大,除了玩具程序外,它无法用于任何其他用途。

Failing this, is there a more sensible way of recording accesses to many addresses? Something in valgrind maybe?

这可以通过编写自定义 Valgrind 工具来实现,但这是一个复杂的命题。

更好的方法可能是使用 Pin tool相反。

关于Linux/C : how to trace the accesses on a number of variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140266/

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