Валидатор указателей - PullRequest
       0

Валидатор указателей

2 голосов
/ 30 сентября 2010

Я отлаживаю большой проект на C ++. Есть несколько разыменованных указателей, вызывающих случайные сбои. Не могли бы вы предложить мне, пожалуйста, лучший бесплатный инструмент для проверки указателя? (Идентификация использования недействительных указателей)

(В противном случае мне потребовались бы годы, чтобы пройти через это вручную)

Также я использовал программу Memory Valuator, чтобы избавиться от большинства утечек памяти, но это не очень помогает при использовании указателей после того, как они были признаны недействительными. Платформа Windows.

UPDATE:

Прежде, чем я отправлю сообщение, я исследовал и другие сообщения. И да, это не помогло. Поэтому я хотел бы поделиться своими исследованиями.

Одним из условий был БЕСПЛАТНЫЙ инструмент, и я не нашел ни одного пригодного для использования, и да, я протестировал дюжину из них. Большинство из предложенных инструментов предназначены для утечки памяти (это не то, что я ищу). Большинство профессиональных инструментов, таких как IBM Cleany, имеют бесплатную или пробную версию, но все они - пустая трата времени (Они сообщают только о количестве проблема, но ничего конкретного).
Другие инструменты, такие как Microsoft Application Verifier, очень полезны для проблем с памятью или совместимостью, но не смогли определить мои проблемы.

Сейчас я тестирую коммерческие инструменты:

Memory Validator - идеально подходит для утечек памяти, но функция «Определить удаленный указатель« этого »» вызывает сбой моего приложения. (и я провел целую вечность с настройками / конфиг.)

Ошибка валидатора - намного лучше. Выявлены некоторые проблемы. Тем не менее, это не очень полезно. Вся трассировка стека находится в инициализации crt / src / XString или Mutex или внутри некоторых критических разделов внутри библиотек C ++. (Пока это все. Надеюсь, эта информация будет полезна.)

Ответы [ 3 ]

8 голосов
/ 30 сентября 2010

Для Unix я рекомендую valgrind.

3 голосов
/ 30 сентября 2010

Чтение Есть ли хороший заменитель Valgrind для Windows? , поскольку есть большой шанс, что вы используете Windows.

0 голосов
/ 01 октября 2010

Предполагая VS2010, запустите его под отладчиком со следующей настройкой:

Debug->Exceptions->Win32 Exceptions->"c0000005 Access Violation" (set the checkbox)

Это поможет вам получить исключение первого шанса для проблем разыменования указателя, таких как в коде ниже

int main(){
    int buf[2];
    int *p = buf;

    p += 100;
    *p = 2;
}

Это действительно помогает в качестве техники первого уровня!Более продвинутые методы потребуют WinDBG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...