How to debug heap corruption on armv5

I am on linux on an embedded device. My architecture is armv5.

My fairly large (~30kloc) has some kind of heap corruption that happens over time.

I cannot run valgrind since my arch is not supported. I can only run a limited gdb since my app uses thread and the corruption most probably happens in one of the thread.

I get

warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

libthread_db and libpthread come from my gnueabi toolchain.

I was wondering what was the best course of actions now. Should I keep trying to get libthread_db to work with gdb? Or is there some other tool like valgrind that I could use?


warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

This error means that GDB attempted to dlopen every libthread_db.so.1 from libthread-db-search-path (use show libthread-db-search-path to see what that is), and all versions of libthread_db.so.1 failed to work with libpthread that you have on the target (your embedded device).

Most likely your libthread-db-search-path is simply incorrect.

Another possibility is that your toolchain shipped (say) i686-linux version of libthread_db.so.1 , but you are using GDB built for x86_64-linux . 64-bit GDB (obviously) can't dlopen 32-bit libthread_db .

Even if you manage to set up multi-threaded debugging properly (which you should try in any case), it is quite unlikely that that will help you find heap corruption problem: usually by the time you get a crash due to heap corruption, all traces of code that actually caused it have disappeared.

If you are using glibc on target, MALLOC_CHECK_=2 might help. Documentation here.

If you are using some other libc , it may have similar malloc debugging facilities. Or you could try one of the many debug mallocs available.


The answers to this question have very good guidelines. I would give electricfence a run. This paper is also very informative(even if it talksuses valgrind).

链接地址: http://www.djcxy.com/p/82318.html

上一篇: 一个奇怪的“Project.exe引发了一个断点。”?

下一篇: 如何在armv5上调试堆损坏