Russian Qt Forum
Сентябрь 30, 2024, 16:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Точка останова на участок памяти  (Прочитано 6762 раз)
qtnoob1k
Гость
« : Сентябрь 29, 2010, 13:36 »

Всем привет! Как в Qt Creator можно пометить участок памяти при изменении которого срабатывает точка останова?
Записан
b-s-a
Гость
« Ответ #1 : Сентябрь 29, 2010, 13:57 »

ставишь обычную точку останова. Запускаешь, дожидаешься пока программа на нее встанет. Открываешь вкладку "точки останова", щелкаешь правой кнопкой на переменной (или на пустом месте) и выбираешь соответствующий пункт.
Записан
qtnoob1k
Гость
« Ответ #2 : Сентябрь 29, 2010, 21:49 »

b-s-a, что-то я там не нашёл как это можно сделать. Может я плохо сформулировал, что же мне надо. Попробую написать яснее. Есть например глобальный int arr[10]; Где-то в программе, в каком-то потоке, не известно где в общем, значения элементов этого массива затираются, тоесть кто-то портит память. Хотелось бы остановиться в момент порчи памяти, чтобы узнать кто же это сделал. В отладчике windbg есть такая возможность и в Visual C++ тоже, мне интересно можно ли это сделать в Qt Creator.
« Последнее редактирование: Сентябрь 29, 2010, 21:52 от qtnoob1k » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Сентябрь 30, 2010, 08:20 »

не уверен что gdb это вообще умеет.
вы уверены что у вас программа правильно спроектирована? если есть доступ к переменным из разных потоков, обычно делают геттеры/сеттеры, защищая мьютексами переменную.
а поставить брейкпоинт в ф-ию труда не составляет. можно тупо подвенить массив и перегрузить operator[], но это уже из области шаманства
Записан
b-s-a
Гость
« Ответ #4 : Сентябрь 30, 2010, 09:44 »

Я ошибся, надо жать на раздел "переменные", затем правой кнопкой на переменной и выбрать пункт "Останов при изменении по адресу объекта..."
Записан
qtnoob1k
Гость
« Ответ #5 : Октябрь 01, 2010, 15:48 »

вы уверены что у вас программа правильно спроектирована? если есть доступ к переменным из разных потоков, обычно делают геттеры/сеттеры, защищая мьютексами переменную.
а поставить брейкпоинт в ф-ию труда не составляет. можно тупо подвенить массив и перегрузить operator[], но это уже из области шаманства
Например ошибка в арифметике с указателем при которой он портит память какого-то объекта к данным которого можно обратиться только с помощью get/set.
Я ошибся, надо жать на раздел "переменные", затем правой кнопкой на переменной и выбрать пункт "Останов при изменении по адресу объекта..."
Странно, у меня такого пункта нет. Пользуюсь Qt Creator из SDK с gcc
« Последнее редактирование: Октябрь 01, 2010, 16:04 от qtnoob1k » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #6 : Октябрь 01, 2010, 16:17 »

gdb умеет точки ставить на память. Так что смотрите свежий creator или другие среды, ну или напрямую используйте gdb...

пруф - http://stackoverflow.com/questions/58851/can-i-set-a-breakpoint-on-memory-access-in-gdb
Записан

Гугль в помощь
b-s-a
Гость
« Ответ #7 : Октябрь 03, 2010, 21:29 »

Странно, у меня такого пункта нет. Пользуюсь Qt Creator из SDK с gcc
А какая версия? Не забывай, что это все обновляется периодически
Записан
qtnoob1k
Гость
« Ответ #8 : Октябрь 05, 2010, 15:38 »

А какая версия? Не забывай, что это все обновляется периодически
Последния версия 4.7, я скачал неделю назад с сайта qt.nokia.com.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 23.