|
|
1
1
是否尝试使用内存调试库(例如dmalloc)。其中许多已经是新工具等,并记录了分配的位置。不过,有些从gdb访问比其他更容易。 此产品具有内存调试功能,可以按您的需要进行以下操作: http://www.allinea.com/index.php?page=48 |
|
|
2
3
所以,在segfault发生的地方,你有对象,但是你不知道创建这些对象的代码片段中的哪一部分创建了它,对吗? 我会检测所有这些对象创建位,并让它们将创建的每个对象的地址以及文件和行号(预先定义的宏可以帮助实现这一点)记录到一个文件中。 然后在调试器下运行该应用程序,让它捕获segfault,并在日志中查找有问题的对象的地址,以找出它是在哪里创建的。然后剥下一层洋葱皮。 |
|
|
3
0
当segfault发生时,我首先尝试在gdb中使用backtrace命令。如果这不能给我一个很好的线索,我会下一步尝试使用Valgrind检查是否有内存泄漏发生。根据我的经验,这两个步骤通常足以缩小范围,在大多数常见情况下找到问题所在。 当做。 |