Мониторинг динамической памяти.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
AI_
Сообщения: 21
Зарегистрирован: 20 фев 2008, 19:44

Добрый день.
Подскажите пожалуйста как можно средствами Борланда отследить изменения в динамической памяти?
В двух словах имею сложный класс работы с памятью, но по непонятным причинам в какой то моемент по определенному адресу данные изменяются, когда изменяться не должны. Нужно отловить этот баг. Но как узнать момент изменения?
Мне нужно средство подобное Watchs, но позволяющее в любом месте программы видеть значение данных по известному адрессу. Другим путем найти баг не представляеться возможным.
Если таких средств в борланде нет, то подскажите где взять другое, как использовать (если сходу там не разобраться), ну вообщем посодействуйте скореейшему решению моей проблемы. Времени очень мало.

Большое спасибо.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Ну во-первых, не стоит надеяться на какие-то суперсредства для диагностики программы. Лучше для начала более грамотно организовать собственный код таким образом, чтобы доступ к выделенной памяти мог бы легко контролироваться, независимо от того, из какого места программы он осуществляется. Это можно сделать так:
Переменная-указатель или статический массив должны быть закрытым членом класса, а все обращения к данным производить только через специальные методы, типа Get(), Set() или Read(), Write(). Тогда ты можешь стать отладчиком в метод Set() или Write() и видеть каждое изменение данных.
Во вторых: я не верю, что твой класс уж настолько сложный, чтобы штатными средствами нельзя было с ним справиться. Есть конечно более мощные отладчики, типа SoftIce от компании NUMega, но его использование вряд ли облегчит тебе работу, скорее только усложнит.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

WinMain писал(а):Переменная-указатель или статический массив должны быть закрытым членом класса, а все обращения к данным производить только через специальные методы, типа Get(), Set() или Read(), Write(). Тогда ты можешь стать отладчиком в метод Set() или Write() и видеть каждое изменение данных.
Есть еще вариант, что изменение произошло "несанкционированно", т.е. просто какой-то оператор (например, копирования) промахнулся мимо памяти и попортил содержимое по "нашему" адресу.
AI_
Сообщения: 21
Зарегистрирован: 20 фев 2008, 19:44

Я уже решил вопрос. Завел глобальную переменную указатель. Думаю это и имел в виду ВинМэйн. Я уже не помню в чем у меня там была лажа, но после истории с АнсиСтринг я был под большим сомнением, что все баги впрограмме появляются по вине програмиста. (Кстати, мое последнее сообщение в том топике было ошибочным. Глюк был в ЭнсиСтринге а не во мне. ПО крайней мере сейчас я так считаю)
Вот мне и начало мерещиться, что Борланд сам вытворяет что хочет с областью памяти.
manitor
Сообщения: 1
Зарегистрирован: 06 авг 2010, 18:34

Мониторинг памяти Вот здесь есть хорошая программа для этого.
Ответить