Название: Точка останова на участок памяти Отправлено: qtnoob1k от Сентябрь 29, 2010, 13:36 Всем привет! Как в Qt Creator можно пометить участок памяти при изменении которого срабатывает точка останова?
Название: Re: Точка останова на участок памяти Отправлено: b-s-a от Сентябрь 29, 2010, 13:57 ставишь обычную точку останова. Запускаешь, дожидаешься пока программа на нее встанет. Открываешь вкладку "точки останова", щелкаешь правой кнопкой на переменной (или на пустом месте) и выбираешь соответствующий пункт.
Название: Re: Точка останова на участок памяти Отправлено: qtnoob1k от Сентябрь 29, 2010, 21:49 b-s-a, что-то я там не нашёл как это можно сделать. Может я плохо сформулировал, что же мне надо. Попробую написать яснее. Есть например глобальный int arr[10]; Где-то в программе, в каком-то потоке, не известно где в общем, значения элементов этого массива затираются, тоесть кто-то портит память. Хотелось бы остановиться в момент порчи памяти, чтобы узнать кто же это сделал. В отладчике windbg есть такая возможность и в Visual C++ тоже, мне интересно можно ли это сделать в Qt Creator.
Название: Re: Точка останова на участок памяти Отправлено: Авварон от Сентябрь 30, 2010, 08:20 не уверен что gdb это вообще умеет.
вы уверены что у вас программа правильно спроектирована? если есть доступ к переменным из разных потоков, обычно делают геттеры/сеттеры, защищая мьютексами переменную. а поставить брейкпоинт в ф-ию труда не составляет. можно тупо подвенить массив и перегрузить operator[], но это уже из области шаманства Название: Re: Точка останова на участок памяти Отправлено: b-s-a от Сентябрь 30, 2010, 09:44 Я ошибся, надо жать на раздел "переменные", затем правой кнопкой на переменной и выбрать пункт "Останов при изменении по адресу объекта..."
Название: Re: Точка останова на участок памяти Отправлено: qtnoob1k от Октябрь 01, 2010, 15:48 вы уверены что у вас программа правильно спроектирована? если есть доступ к переменным из разных потоков, обычно делают геттеры/сеттеры, защищая мьютексами переменную. Например ошибка в арифметике с указателем при которой он портит память какого-то объекта к данным которого можно обратиться только с помощью get/set.а поставить брейкпоинт в ф-ию труда не составляет. можно тупо подвенить массив и перегрузить operator[], но это уже из области шаманства Я ошибся, надо жать на раздел "переменные", затем правой кнопкой на переменной и выбрать пункт "Останов при изменении по адресу объекта..." Странно, у меня такого пункта нет. Пользуюсь Qt Creator из SDK с gccНазвание: Re: Точка останова на участок памяти Отправлено: navrocky от Октябрь 01, 2010, 16:17 gdb умеет точки ставить на память. Так что смотрите свежий creator или другие среды, ну или напрямую используйте gdb...
пруф - http://stackoverflow.com/questions/58851/can-i-set-a-breakpoint-on-memory-access-in-gdb Название: Re: Точка останова на участок памяти Отправлено: b-s-a от Октябрь 03, 2010, 21:29 Странно, у меня такого пункта нет. Пользуюсь Qt Creator из SDK с gcc А какая версия? Не забывай, что это все обновляется периодическиНазвание: Re: Точка останова на участок памяти Отправлено: qtnoob1k от Октябрь 05, 2010, 15:38 А какая версия? Не забывай, что это все обновляется периодически Последния версия 4.7, я скачал неделю назад с сайта qt.nokia.com. |