Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: andrew.k от Февраля 15, 2012, 14:48



Название: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 14:48
почему отладчик не может отображать выражения?
например,
Код
C++ (Qt)
array[i].toMyClass().extract()
и часто в отладке сталкиваюсь с тем, что даже некоторые переменные не может показать, говорит <unavaillable syncronous data>

Это у всех так или только у меня?


Название: Re: анализ выражений в отладке
Отправлено: ecspertiza от Февраля 15, 2012, 16:21
 у меня тоже так, причем очень часто, юзаю qDebug() ,а че делать :)


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 16:28
у меня тоже так, причем очень часто, юзаю qDebug() ,а че делать :)
Это бесит)


Название: Re: анализ выражений в отладке
Отправлено: Пантер от Февраля 15, 2012, 16:33
А мне нормально. Отладку делаю через qDebug.


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 16:44
А мне нормально. Отладку делаю через qDebug.
Ну ты ж не все данные в qDebug пишешь?
Бывает хочешь посмотреть что-то, когда по шагам идешь, а хрен.
1. Прервать отладку
2. qDebug() << FuckIt;
3. Собрать
4. Запустить.
5. Вернуться к тому с чего начали.

Не бесит? А ведь могло же нормально работать)


Название: Re: анализ выражений в отладке
Отправлено: kambala от Февраля 15, 2012, 16:51
почему отладчик не может отображать выражения?
например,
Код
C++ (Qt)
array[i].toMyClass().extract()
и часто в отладке сталкиваюсь с тем, что даже некоторые переменные не может показать, говорит <unavaillable syncronous data>

Это у всех так или только у меня?
а где эти команды вводить в креаторе? это ж вводится в виде "p myexpression"?


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 16:54
почему отладчик не может отображать выражения?
например,
Код
C++ (Qt)
array[i].toMyClass().extract()
и часто в отладке сталкиваюсь с тем, что даже некоторые переменные не может показать, говорит <unavaillable syncronous data>

Это у всех так или только у меня?
а где эти команды вводить в креаторе?
Какие команды?
Что значит где? в окне watch рядом с другими переменными.

Цитировать
это ж вводится в виде "p myexpression"?
Поясни, о чем ты.


Название: Re: анализ выражений в отладке
Отправлено: kambala от Февраля 15, 2012, 16:57
я о командах для отладчика в точке остановки. например в Xcode это можно делать. ну или если из-под терминала запускать приложение в виде "gdb start myapp" или как-то так.

скажем, я остановился в точке и хочу вывести значение переменной i - ввожу "p i" (print i), результат заносится в $1 и выводится.


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 17:06
я о командах для отладчика в точке остановки. например в Xcode это можно делать. ну или если из-под терминала запускать приложение в виде "gdb start myapp" или как-то так.

скажем, я остановился в точке и хочу вывести значение переменной i - ввожу "p i" (print i), результат заносится в $1 и выводится.
Какая разница в терминале или в гуе.
Все равно дефолтно gdb идет.

И он не всегда толком может распознать выражения и переменные.


Название: Re: анализ выражений в отладке
Отправлено: kambala от Февраля 15, 2012, 17:13
Какая разница в терминале или в гуе.
а я бы проверил, да с отладкой в терминале не особо разбираюсь.

кстати вижуалстудийный отладчик часто лучше себя показывает при чтении значений переменных чем ждб.


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 15, 2012, 18:44
а кто-нибудь другим отладчиком пользуется?


Название: Re: анализ выражений в отладке
Отправлено: b-s-a от Февраля 16, 2012, 10:07
Народ, выражение array.toMyClass().extract() - это не просто арифметическое действие. Это вызов минимум 2-х методов. А как вам отладчик это сделает? Сначала скомпилирует, потом вызовет (а если приложение упадет из-за этого)?
Тут надо анализировать внутренние свойства класса. Если он находится во внешней библиотеке без отладочной информации - сочувствую.


Название: Re: анализ выражений в отладке
Отправлено: Пантер от Февраля 16, 2012, 10:13
Делаем вот так:
Код
C++ (Qt)
const MySlass myClass = array.toMyClass();
const XXX xxx = myClass.extract();
 
И отладчик все покажет.


Название: Re: анализ выражений в отладке
Отправлено: andrew.k от Февраля 16, 2012, 11:57
Народ, выражение array.toMyClass().extract() - это не просто арифметическое действие. Это вызов минимум 2-х методов. А как вам отладчик это сделает? Сначала скомпилирует, потом вызовет (а если приложение упадет из-за этого)?
Тут надо анализировать внутренние свойства класса. Если он находится во внешней библиотеке без отладочной информации - сочувствую.
Визуальная студия прекрасно справляется с любыми конструкциями.
И даже в старом добром билдере можно было это включать в окне watch ("allow side effetcs")

Схалтурили.

Пантер, это тоже самое, что юзать qDebug(). Нужна перекомпиляция. А хочется just-in-time.


Название: Re: анализ выражений в отладке
Отправлено: kambala от Февраля 16, 2012, 15:44
Народ, выражение array.toMyClass().extract() - это не просто арифметическое действие. Это вызов минимум 2-х методов. А как вам отладчик это сделает? Сначала скомпилирует, потом вызовет (а если приложение упадет из-за этого)?
например при отладке Objective-C кода такой проблемы нету - ждб просто возвращается в предыдущее состояние если отсылка сообщения объекту крашит приложение