Добрый день.
Подскажите пожалуйста как можно средствами Борланда отследить изменения в динамической памяти?
В двух словах имею сложный класс работы с памятью, но по непонятным причинам в какой то моемент по определенному адресу данные изменяются, когда изменяться не должны. Нужно отловить этот баг. Но как узнать момент изменения?
Мне нужно средство подобное Watchs, но позволяющее в любом месте программы видеть значение данных по известному адрессу. Другим путем найти баг не представляеться возможным.
Если таких средств в борланде нет, то подскажите где взять другое, как использовать (если сходу там не разобраться), ну вообщем посодействуйте скореейшему решению моей проблемы. Времени очень мало.
Большое спасибо.
Мониторинг динамической памяти.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Ну во-первых, не стоит надеяться на какие-то суперсредства для диагностики программы. Лучше для начала более грамотно организовать собственный код таким образом, чтобы доступ к выделенной памяти мог бы легко контролироваться, независимо от того, из какого места программы он осуществляется. Это можно сделать так:
Переменная-указатель или статический массив должны быть закрытым членом класса, а все обращения к данным производить только через специальные методы, типа Get(), Set() или Read(), Write(). Тогда ты можешь стать отладчиком в метод Set() или Write() и видеть каждое изменение данных.
Во вторых: я не верю, что твой класс уж настолько сложный, чтобы штатными средствами нельзя было с ним справиться. Есть конечно более мощные отладчики, типа SoftIce от компании NUMega, но его использование вряд ли облегчит тебе работу, скорее только усложнит.
Переменная-указатель или статический массив должны быть закрытым членом класса, а все обращения к данным производить только через специальные методы, типа Get(), Set() или Read(), Write(). Тогда ты можешь стать отладчиком в метод Set() или Write() и видеть каждое изменение данных.
Во вторых: я не верю, что твой класс уж настолько сложный, чтобы штатными средствами нельзя было с ним справиться. Есть конечно более мощные отладчики, типа SoftIce от компании NUMega, но его использование вряд ли облегчит тебе работу, скорее только усложнит.
Есть еще вариант, что изменение произошло "несанкционированно", т.е. просто какой-то оператор (например, копирования) промахнулся мимо памяти и попортил содержимое по "нашему" адресу.WinMain писал(а):Переменная-указатель или статический массив должны быть закрытым членом класса, а все обращения к данным производить только через специальные методы, типа Get(), Set() или Read(), Write(). Тогда ты можешь стать отладчиком в метод Set() или Write() и видеть каждое изменение данных.
Я уже решил вопрос. Завел глобальную переменную указатель. Думаю это и имел в виду ВинМэйн. Я уже не помню в чем у меня там была лажа, но после истории с АнсиСтринг я был под большим сомнением, что все баги впрограмме появляются по вине програмиста. (Кстати, мое последнее сообщение в том топике было ошибочным. Глюк был в ЭнсиСтринге а не во мне. ПО крайней мере сейчас я так считаю)
Вот мне и начало мерещиться, что Борланд сам вытворяет что хочет с областью памяти.
Вот мне и начало мерещиться, что Борланд сам вытворяет что хочет с областью памяти.
Мониторинг памяти Вот здесь есть хорошая программа для этого.