У меня есть ошибка, которая происходит очень редко, но сбой моей программы на C++. Кажется, у меня проблема с переполнением буфера или что-то подобное. Я считаю, что эти типы ошибок наиболее трудно диагностировать.Как регистрироваться, когда записывается конкретная ячейка памяти и с какой функцией?
Моя программа всегда сбой из-за того же поврежденного места памяти. Есть ли какой-нибудь инструмент для отладки, который может обнаружить, когда определенное место памяти будет записано и зарегистрирует функцию, которая это делает?
Я использую визуальный детектор утечки (VLD) для моей утечки памяти, и он отлично работает. Он заменяет оригинальные mallocs, которые являются собственными, и регистрирует каждое распределение. Мне было интересно, есть ли что-то подобное для памяти?
Я знаю, что что-то вроде этого искалечит программу, но это может быть очень полезно.
Я использую Visual Studio 2008.
@Matthieu: (относительно редактирования комментария) gcc и gdb отлично работают на Windows, BSD и OS X тоже! :) – 2010-03-31 14:55:23
Но разве проблема с коррупцией в памяти не отличается, если используется другой компилятор? Я всегда думал, что gdb требует, чтобы программа была скомпилирована с помощью gcc:/ –
@Matthiew: Эффективно, в основном, да (но реальное требование заключается в том, чтобы иметь возможность читать формат отладочного символа, если вы хотите использовать их). Я не предполагал, что rusbi должен принять ответ gdb, но все же полезно иметь его, поскольку те, кто не использует VS, могут найти это полезным, когда они обнаружат этот вопрос. Комментарий был дружественным jibe, потому что вы подразумевали, что gcc работает только на Linux. – 2010-03-31 15:21:18