当一个全局变量值被改写时,如何跟踪?

weitao999 2010-12-24 01:28:15
记录日志或者主动产生core文件。
...全文
578 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
weitao999 2010-12-25
  • 打赏
  • 举报
回复
已通过mprotect解决,但总是复现不了,有没有很好的内存越界检查工具呢,C语言代码。
dukong123 2010-12-25
  • 打赏
  • 举报
回复
输出日志。。。。。。。。。。。
T0Ols 2010-12-25
  • 打赏
  • 举报
回复
调试真的很难
luciferisnotsatan 2010-12-24
  • 打赏
  • 举报
回复
调试的话,可以设内存断点
Jim_King_2000 2010-12-24
  • 打赏
  • 举报
回复
Windows下可以使用内存断点。
libinfei8848 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 memoleak 的回复:]
使用观察点。。。
现在多数CPU都能支持数据断点功能。
在数据断点使能时,
当CPU访问该地址时,CPU会陷入异常。在异常处理程序里面可以处理之。。。
参见GDB使用手册
[/Quote]

支持,windows下将变量放在保护属性的内存地址,使用seh捕捉修改写异常,在异常中通知
  • 打赏
  • 举报
回复
记得gdb调试中可以加条件实现断点!
break if ...(这里可以写全局变量不等于原有值)

这样当全局变量被改变是就断点。。
hl0702xin 2010-12-24
  • 打赏
  • 举报
回复
断点追踪`
羽飞 2010-12-24
  • 打赏
  • 举报
回复
楼上的建议不错,最好在使用全局变量的地方做个标记,尤其是在修改全局变量时
ZXW0521 2010-12-24
  • 打赏
  • 举报
回复
写一个函数,只有这个函数会改这个全局变量,其它地方都调这个函数,应该就好调试一些了
csc_xixi 2010-12-24
  • 打赏
  • 举报
回复
其实我觉得用调试,然后不断的观察它的值,注意变化,或者用个if语句,当值发生变化,就输出一条提示信息
memoleak 2010-12-24
  • 打赏
  • 举报
回复
使用观察点。。。
现在多数CPU都能支持数据断点功能。
在数据断点使能时,
当CPU访问该地址时,CPU会陷入异常。在异常处理程序里面可以处理之。。。
参见GDB使用手册
flysnowhite 2010-12-24
  • 打赏
  • 举报
回复
我只会最简单的单步跟踪,F10或F11,若全局变量和局部变量同名,自己区分是那一个变量起作用。
如果希望追踪的话,借鉴操作系统的PV操作。当全局变量变化时,记录调用的函数及语句即可。具体编程较麻烦。
prohibit 2010-12-24
  • 打赏
  • 举报
回复
感觉还是少用全局变量好,要是可以还是改为参数传递吧,全局变量可能会在一些不明显的包含文件中被重新定义,若是使用的少还好跟踪些,要是使用的比较多、跟踪就麻烦了,记录日志应该是一个好的方法~~
weitao999 2010-12-24
  • 打赏
  • 举报
回复
关键是也复现不了,但通过已有的core文件能确认某个全局变量被改写了,所以只能先加调试信息,等下次出现时确认具体原因。
minmin0876 2010-12-24
  • 打赏
  • 举报
回复
如果可以调试的情况 可以才想几处 可疑点 加断点调试

或者 每个点都断 然后在变量那里看结果

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧