【发布时间】:2013-12-23 05:40:27
【问题描述】:
我的应用程序是一个在 Solaris 上运行的多线程程序。
最近发现它可能会崩溃,原因是指针数组中的一个成员从有效值更改为NULL,所以在访问它时,它崩溃了。
因为出现率很低,在过去的2个月里只出现了两次,而且数组中变化的成员也不一样。找不到重复的步骤,查看代码后也没有得到有价值的线索。
任何人都可以就如何调试内存随机更改问题提供一些建议吗?
【问题讨论】:
-
在该站点添加日志功能。
-
在调试器中运行程序,并在您关心的内存位置设置内存监视。不过,这假设它是您可以观看的一致内存位置。否则,类似 valgrind 的东西可能有助于发现内存错误。
-
@Cornstalks:因为这个问题是在生产环境中出现的,所以我认为不能使用调试器。
-
@C.R.:因为不知道值是什么时候在哪里改的,所以在哪里添加trace呢?
-
@NanXiao:日志功能在发现指针变为空时会转储内存,这与您的预期相反。然后您可以使用调试器检查核心转储。
标签: c debugging memory solaris