Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在armv5上调试堆损坏_C++_Linux_Gdb_Valgrind_Heap Corruption - Fatal编程技术网

C++ 如何在armv5上调试堆损坏

C++ 如何在armv5上调试堆损坏,c++,linux,gdb,valgrind,heap-corruption,C++,Linux,Gdb,Valgrind,Heap Corruption,我使用嵌入式设备上的linux。 我的架构是armv5 我的相当大(~30kloc)的堆随着时间的推移会发生某种堆损坏 我无法运行valgrind,因为我的拱门没有支撑。 我只能运行一个有限的gdb,因为我的应用程序使用线程,而损坏很可能发生在其中一个线程中 我明白了 警告:找不到与服务器线程匹配的libthread_db 库,线程调试将不可用 libthread_db和libpthread来自我的gnueabi工具链 我想知道现在最好的做法是什么。我应该继续尝试让libthread_db与gd

我使用嵌入式设备上的linux。 我的架构是armv5

我的相当大(~30kloc)的堆随着时间的推移会发生某种堆损坏

我无法运行valgrind,因为我的拱门没有支撑。 我只能运行一个有限的gdb,因为我的应用程序使用线程,而损坏很可能发生在其中一个线程中

我明白了

警告:找不到与服务器线程匹配的libthread_db 库,线程调试将不可用

libthread_db和libpthread来自我的gnueabi工具链

我想知道现在最好的做法是什么。我应该继续尝试让libthread_db与gdb一起工作吗?或者有没有像valgrind这样的工具我可以使用?

有很好的指导原则。我想试试看。 信息量也非常大(即使它谈论\使用valgrind)。

有很好的指导方针。我想试试看。 信息量也非常大(即使它谈论\使用valgrind)

警告:找不到与Subsier的线程库匹配的libthread_db,线程调试将不可用

此错误意味着GDB试图从
libthread db search path
(使用
show libthread db search path
)中
dlopen
libthread_db.so.1
打开一个
libthread db.so.1
,并且所有版本的
libthread_db.so.1
无法使用目标上的
libpthread
(您的嵌入式设备)

很可能您的
libthread数据库搜索路径不正确

另一种可能性是,您的工具链提供了(比如)i686 linux版本的
libthread\u db.so.1
,但您使用的是为
x86\u 64-linux
构建的GDB。64位GDB(显然)无法打开32位
libthread\u db

即使您成功地正确设置了多线程调试(在任何情况下都应该尝试),这也不太可能帮助您发现堆损坏问题:通常,当您由于堆损坏而发生崩溃时,实际导致堆损坏的所有代码跟踪都已消失

如果您正在目标上使用
glibc
MALLOC\u CHECK\u2
可能会有所帮助。文档

如果您正在使用其他的
libc
,它可能有类似的malloc调试工具。或者您可以尝试一种可用的

警告:找不到与Subsier的线程库匹配的libthread_db,线程调试将不可用

此错误意味着GDB试图从
libthread db search path
(使用
show libthread db search path
)中
dlopen
libthread_db.so.1
打开一个
libthread db.so.1
,并且所有版本的
libthread_db.so.1
无法使用目标上的
libpthread
(您的嵌入式设备)

很可能您的
libthread数据库搜索路径不正确

另一种可能性是,您的工具链提供了(比如)i686 linux版本的
libthread\u db.so.1
,但您使用的是为
x86\u 64-linux
构建的GDB。64位GDB(显然)无法打开32位
libthread\u db

即使您成功地正确设置了多线程调试(在任何情况下都应该尝试),这也不太可能帮助您发现堆损坏问题:通常,当您由于堆损坏而发生崩溃时,实际导致堆损坏的所有代码跟踪都已消失

如果您正在目标上使用
glibc
MALLOC\u CHECK\u2
可能会有所帮助。文档


如果您正在使用其他
libc
,它可能具有类似的malloc调试功能。或者您可以尝试一种可用的功能。

是否可以a)将代码移植到桌面操作系统并在那里进行valgrind,或者b)替换全局
new
并跟踪分配?如何替换全局新建?@Eric:。a)是否可以将代码移植到您的桌面操作系统并在那里进行valgrind,或者b)替换全局
新建
并跟踪分配?如何替换全局新建?@Eric:。我知道libthreaddb搜索路径配置,但不幸的是,它并没有解决我的问题。我的工具链和GDB都在我的设备上运行,我已经用GoDB和GoDuChanCK交叉编译了,我使用C++,所以我没有任何的MalCoS,只有新闻。这仍然有效吗?我与gdb的打赌是检查某个特定变量的内存位置是否被覆盖,然后在该位置设置内存监视。可能有效,也可能无效…我知道libthread db search path配置,但不幸的是,它不能解决我的问题。我的工具链和GDB都在我的设备上运行,我已经用GoDB和GoDuChanCK交叉编译了,我使用C++,所以我没有任何的MalCoS,只有新闻。这仍然有效吗?我与gdb的打赌是检查某个特定变量的内存位置是否被覆盖,然后在该位置设置内存监视。可能有效,也可能无效。。。