2010-03-31 2 views
4

У меня есть ошибка, которая происходит очень редко, но сбой моей программы на C++. Кажется, у меня проблема с переполнением буфера или что-то подобное. Я считаю, что эти типы ошибок наиболее трудно диагностировать.Как регистрироваться, когда записывается конкретная ячейка памяти и с какой функцией?

Моя программа всегда сбой из-за того же поврежденного места памяти. Есть ли какой-нибудь инструмент для отладки, который может обнаружить, когда определенное место памяти будет записано и зарегистрирует функцию, которая это делает?

Я использую визуальный детектор утечки (VLD) для моей утечки памяти, и он отлично работает. Он заменяет оригинальные mallocs, которые являются собственными, и регистрирует каждое распределение. Мне было интересно, есть ли что-то подобное для памяти?

Я знаю, что что-то вроде этого искалечит программу, но это может быть очень полезно.

Я использую Visual Studio 2008.

+0

@Matthieu: (относительно редактирования комментария) gcc и gdb отлично работают на Windows, BSD и OS X тоже! :) – 2010-03-31 14:55:23

+0

Но разве проблема с коррупцией в памяти не отличается, если используется другой компилятор? Я всегда думал, что gdb требует, чтобы программа была скомпилирована с помощью gcc:/ –

+0

@Matthiew: Эффективно, в основном, да (но реальное требование заключается в том, чтобы иметь возможность читать формат отладочного символа, если вы хотите использовать их). Я не предполагал, что rusbi должен принять ответ gdb, но все же полезно иметь его, поскольку те, кто не использует VS, могут найти это полезным, когда они обнаружат этот вопрос. Комментарий был дружественным jibe, потому что вы подразумевали, что gcc работает только на Linux. – 2010-03-31 15:21:18

ответ

3

Если вы используете Visual C++, тогда найдите data breakpoints.

+0

Я только что нашел его минуту назад, но спасибо в любом случае! Должно быть, googled немного больше перед публикацией ... – rusbi

2

Многие отладчики могут наблюдать определенную ячейку памяти, и перерыв, когда содержимое этого места изменяются. Не уверен в вашей конкретной toolchain, но gdb, безусловно, поддерживает это.

+0

Сценарии gdb могут особенно пригодиться здесь. – 2010-03-31 14:24:53

+0

Я использую VS 2008 для этого проекта. – rusbi

0

Valgrind - это инструмент, который может обнаруживать такие проблемы. Он бесплатный, с открытым исходным кодом и простой в использовании.

+0

... и Linux/Darwin только. – unwind

+0

Я думаю, что слышал об этом, но я использую окна ... – rusbi

+0

Крысы. Извини за это. – Beta