哪个进程写入哪个内存地址?

哪个进程写入哪个内存地址?

最近,我在工作中发现了各种各样与内存相关的崩溃(Ubuntu 14.04 上的 C++ 应用程序)。我们的应用程序使用专有的第三方库来与实时数据交互,并且是高度多线程的。在各种情况下,glibc 吐出的错误有“双重释放或损坏”和“检测到损坏的双链表”。从这些恢复的核心显示第三方代码(更频繁)和我们自己的代码(不太频繁)中都发生崩溃。统一特征是每次崩溃都对应一个new/malloc或一个delete/ free

不幸的是,在这种环境中调试器的空间很小。这些应用程序对速度高度敏感,并且输入数据和操作环境只能在试图重现崩溃时进行近似,因为环境中的一切都是实时的。

话虽这么说,我的问题是:存在哪些实用程序可以准确地说明哪些进程的哪些部分不应该接触内存?由于无法可靠地重现崩溃,因此我在程序上唯一的选择是捕获数据,然后在崩溃发生后检查它。为此,我发现O型材系统教授,但我不确定这两个工具是否适合该任务。

对于问题的含糊之处,我深表歉意,并提前感谢有关此问题的任何指导。

相关内容