我可以知道哪个线程从核心转储文件中更改了全局变量的值吗?

标签 c multithreading unix gdb coredump

我的程序是一个用C 编写的多线程程序,运行在Solaris 上。

现在,一个变量(分配在堆中)有时会从有效值更改为 NULL,因此在访问它时,会发生核心转储。

我知道的方法都试过了:使用libumem,添加日志,代码走查,什么都找不到。

所以当我再次分析核心转储文件时,我有了一个绝妙的想法:我能知道哪个线程从核心转储文件中更改了全局变量(包括从堆中分配的)的值吗?任何人都可以从核心转储文件中提供一些线索吗?

最佳答案

Can I know which thread change the global variable (including malloced from heap)'s value from core dump file?

没有。

核心转储记录崩溃点进程内存的当前状态,而不是它的历史。就像看墙上喷漆涂鸦的照片你无法分辨是谁画的一样,在核心转储中查看 NULL 也不会告诉你是谁把它放在那里的。

关于我可以知道哪个线程从核心转储文件中更改了全局变量的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643736/

相关文章:

linux - Bash - if 语句不会自动运行

c - 学习 Unix 和 C — 查看进程、文件和 v 节点表

c - 32 位无符号乘法在 64 位上导致未定义的行为?

java - 线程和 Jms 事务

c++ - OpenCV 为键盘事件设置回调

c++ - ReadDirectoryChangesW 和 GetOverlappedResult

c++ - 如何从 MFC 中的线程更改状态栏的 Pane 文本?

c - YACC 生成的解析器对重复的相同输入给出不同的输出

c - 从技术上讲,所有函数都可以是 void 函数吗?

c - 如何将__attribute __((aligned(32)))应用于int *?