Как отладить повреждение кучи на armv5 - PullRequest
1 голос
/ 20 сентября 2011

Я на Linux на встроенном устройстве.Моя архитектура - armv5.

В моем довольно большом (~ 30kloc) повреждении кучи происходит какое-то время.

Я не могу запустить valgrind, так как моя арка не поддерживается.Я могу запустить только ограниченный GDB, так как мое приложение использует поток, и повреждение, скорее всего, происходит в одном из потоков.

Я получаю

предупреждение: невозможно найти libthread_db, соответствующий потоку подчиненногобиблиотека, отладка потоков не будет доступна.

libthread_db и libpthread взяты из моей цепочки инструментов gnueabi.

Мне было интересно, каков был лучший способ действий сейчас.Стоит ли пытаться заставить libthread_db работать с gdb?Или есть какой-нибудь другой инструмент, как valgrind, который я мог бы использовать?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

предупреждение: невозможно найти libthread_db, совпадающий с библиотекой потоков подчиненного, отладка потоков будет недоступна.

Эта ошибка означает, что GDB попытался dlopen каждые libthread_db.so.1 из libthread-db-search-path (используйте show libthread-db-search-path, чтобы увидеть, что это такое), и все версии libthread_db.so.1 не смогли работать с libpthread, который у вас есть на цели (ваше встроенное устройство).

Скорее всего, ваш libthread-db-search-path просто неверен.

Другая возможность состоит в том, что ваша цепочка инструментов поставила (скажем) i686-linux версию libthread_db.so.1, но вы используете GDB, созданную для x86_64-linux. 64-битный GDB (очевидно) не может выдавать 32-битный libthread_db.

Даже если вам удастся правильно настроить многопоточную отладку (которую вы должны попробовать в любом случае), маловероятно, что это поможет вам найти проблему с повреждением кучи: обычно к моменту сбоя из-за кучи коррупция, все следы кода, который фактически вызвал ее, исчезли.

Если вы используете glibc на цели, MALLOC_CHECK_=2 может помочь. Документация здесь .

Если вы используете какой-то другой libc, он может иметь аналогичные средства отладки malloc. Или вы можете попробовать один из много отладка mallocs доступны.

1 голос
/ 20 сентября 2011

Ответы на этот вопрос имеют очень хорошие рекомендации. Я бы устроил электрический забор. Эта статья также очень информативна (даже если она говорит \ использует valgrind).

...