【发布时间】:2015-10-27 16:42:03
【问题描述】:
我知道这可能有点模糊和牵强(抱歉,stackoverflow 警察!)。
有没有办法在没有外力的情况下检测(基本上跟踪)每个指针访问和跟踪读取和写入——一般读取/写入或每次访问的读取/写入数量。如果可以为所有变量完成并区分堆栈和堆变量,则奖励。
一般来说有没有办法包装指针,还是应该通过自定义堆来完成?即使使用自定义堆,我也想不出办法。
最终,我希望看到所述日志的可视化表示,它将向我显示表示为块(字节或倍数)的变量以及在它们上用于读取和写入的热图。
超简单的例子:
int i = 5;
int *j = &i;
printf("%d", *j); /* Log would write *j was accessed for read and read sizeof(int) bytes
尝试以更简洁的方式重新表述:
(如何)在没有外部二进制检测的情况下,我如何拦截(并记录)对 C 中指针的访问? - 如果我能区分读取和写入并获得指针的名称和读取/写入的大小(以字节为单位),则奖励。
【问题讨论】:
-
它是特定于实现的:取决于编译器、libc、操作系统等...标准 C99 或 C11 不了解检测或分析。因此,编辑您的问题,通过详细介绍您的 C 实现和代码来改进它
-
另外,解释一下你为什么这么问......如果没有额外的编辑,我很快就会对这个问题投反对票,因为不清楚,并且可能会因为过于宽泛而投票支持关闭......
-
我为什么要问?我为什么不呢?此外,它在问题的末尾进行了解释。如果可能,我想记录对所有或选择指针的每次访问并区分读取和写入,并记录读取/写入的数量。实施并不重要,因为我想看看这是可能的任何方式。如果它确实重要,那么 GCC 5.2(OSX、Windows/MinGW 和 Linux)以及它附带的一切都是香草。
-
我投了反对票(但我正在输入答案),因为您没有编辑您的问题...
-
我做了,但我不能同时写评论和编辑。
标签: c pointers memory memory-management