c – 记录全局变量是否被读取或写入

c – 记录全局变量是否被读取或写入,第1张

概述需求: 给定一个C程序,我必须确定访问全局变量的函数是读取它们还是写入它们. 示例代码: #include <stdio.h>/* global variable declaration */int g = 20;int main(){ /* writing the global variable */ g = 10; /* reading the glob 需求:

给定一个C程序,我必须确定访问全局变量的函数是读取它们还是写入它们.

示例代码:

#include <stdio.h>/* global variable declaration */int g = 20;int main(){    /* writing the global variable */    g = 10;    /* reading the global variable */    printf ("value of g = %d\n",g);    return 0;}

执行上述代码,我想以下列格式生成日志文件:

1- Global variable a written in function main() "TIME_STAMP"2- Global variable a read in function main() "TIME_STAMP"

研究:

我可以通过对源代码进行静态分析来达到这个目的:

>通过c代码并识别全局的语句
变量被读取.
>然后分析c代码语句来确定是否
它是一个读或写语句(检查if或 – *** 作符
与全局变量或任何assignemnt一起使用
全局变量)
>在执行的标识语句之上添加一个日志声明
连同这个陈述执行.

这不是一个正确的实现.

一些研究:

我已经了解了调试器如何捕获信息.

互联网中的一些链接:
How to catch a memory write and call function with address of write

解决方法 不完全回答你的问题,但只要记录访问,你可以做:
#include <stdio.h>int g = 0;#define g (*(fprintf(stderr,"accessing g from %s. g = %d\n",__FUNCTION__,g),&g))voID foo(voID){  g = 2;  printf("g=%d\n",g);}voID bar(voID){  g = 3;  printf("g=%d\n",g);}int main(voID){  printf("g=%d\n",g);  g = 1;  foo();  bar();  printf("g=%d\n",g);}

哪个打印:

accessing g from main. g = 0g=0accessing g from main. g = 0accessing g from foo. g = 1accessing g from foo. g = 2g=2accessing g from bar. g = 2accessing g from bar. g = 3g=3accessing g from main. g = 3g=3
总结

以上是内存溢出为你收集整理的c – 记录全局变量是否被读取或写入全部内容,希望文章能够帮你解决c – 记录全局变量是否被读取或写入所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存