Добрый день,
у меня есть проект, в нем время от времени появляются ошибки связанные с управлением памятью, например вызов free() для уже освобожденного блока. Проект очень большой и так просто локализовать ошибки не получается. Проект написан на чистом C и скомпилирован в VC++ 7.1.
Есть ли какие-то tools которые помогают в отлове ошибок memory management? Пробовал BoundsChecker, он мне ничем не помог
Желательно чтобы для tools была доступна триал версия, потому что проект одноразовый и покупать tool нецелесообразно.
Заранее спасибо !!!
Debugging memory management errors VC++, pure C
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
-
- Уже с Приветом
- Posts: 7759
- Joined: 18 Sep 2001 09:01
- Location: RUS.76 -> KOR -> RUS.53 -> US.PA -> US.MD
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
Nervous wrote:Ну уж если BoundChecker не помог
Какая версия кстати?
та что входит в Compuware DevPartner Studio 7.0
Может я его использую неправильно?
Я запускаю EXE-шник под ним и пытаюсь добиться падения программы. Добиваюсь, после этого BC генерирует мне огромный лист memory leaks, который мне не особо помогает. Естественно раз программа упала, а не была нормально завершена то там куча memory leaks.
Мне надо выяснить почему программа падает, конкретно почему иногда происходят двойные вызовы free()
-
- Уже с Приветом
- Posts: 7759
- Joined: 18 Sep 2001 09:01
- Location: RUS.76 -> KOR -> RUS.53 -> US.PA -> US.MD
Да, думаю неправильно. Чтоб он начал что-то показывать, надо генерить код с его помощью - т.н. Instrumental Build. Для этого он интегрируется в VS - в меню студии появляется менюшка BoundsChecker. В ней надо включить Integrated Debugging и перестроить весь проект. Тогда в код будут "вкомпилировано" куча проверок. Там же его и запустить можно. Да, и поставьте Settings на Maximum, но будьте готовы, что боундсчекер будет ругаться на места, которые не выглядят ошибочными. Тогда просто давите кнопку Suppress или Acknowledge и идите дальше.
Да, вот тока я неуверен, что DevPartner 7.0 будет работать с .NET. У них на сайте есть 7.1, которая как раз для него. Доступна триал-версия.
Да, вот тока я неуверен, что DevPartner 7.0 будет работать с .NET. У них на сайте есть 7.1, которая как раз для него. Доступна триал-версия.
N.E.R.V.O.U.S.: Networked Electronic Replicant Viable for Observation and Ultimate Sabotage.
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Seryi wrote:Мне надо выяснить почему программа падает, конкретно почему иногда происходят двойные вызовы free()
Ну это то понятно, гдето указатели дублируются а потом чтото удаляется дважды, чтото подвисает. Скорее всего вам придется тупо смотреть код, и если проект действительно большой и запутанный - могу только посочувствовать, я не встречал пока хороших тулзов, помогающих от "кривых рук".
В качестве совета - вываливайте в диагностику значения указателей перед их освобождением и обнуляйте их после освобождения, так вы сможете локализовать что удаляется дважды.
Тупизна как Энтропия. Неумолимо растет.
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
Boriskin wrote:Ну это то понятно, гдето указатели дублируются а потом чтото удаляется дважды, чтото подвисает. Скорее всего вам придется тупо смотреть код, и если проект действительно большой и запутанный - могу только посочувствовать, я не встречал пока хороших тулзов, помогающих от "кривых рук".
В качестве совета - вываливайте в диагностику значения указателей перед их освобождением и обнуляйте их после освобождения, так вы сможете локализовать что удаляется дважды.
Ваш совет мне помог, впрочем как и BoundsChecker использованный как говорил Nervous. Вроде бы за 8 часов ожесточенного дебага я проблему решил.
Огромное спасибо. Если у меня будут еще C проекты обязательно куплю BoundsChecker.
-
- Уже с Приветом
- Posts: 1316
- Joined: 03 Jul 2003 06:02
- Location: USA
Nervous wrote:Да, вот тока я неуверен, что DevPartner 7.0 будет работать с .NET. У них на сайте есть 7.1, которая как раз для него. Доступна триал-версия.
У них вышла уже следующая версия, вчера мы её получили, правда, пока что не поставил.
Memory leaks в последнее время не ловлю (т.к. большей частью стал писать на C#), а профайлер и Memory Analyzer хороши!