Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: navrocky от Сентябрь 16, 2009, 12:47



Название: QtCreator: Вызов функции в отладчике в watch
Отправлено: navrocky от Сентябрь 16, 2009, 12:47
Не разберусь никак с окном watch  ??? Хочется вызвать в watch функцию и просмотреть результат, есть ли такая возможность в QtCreator? Когда создаешь watch с вызовом функции, например, toStr(10), то пишет, что <not in scope>. Хотя различные выражения типа 1+2/3 работают. Проверил, что в самом gdb такая возможность есть, и работает нормально.

Кто-нибудь что-нибудь знает по этой теме? Чешутся руки залезть в код QtCreator и подправить, но не уверен, что над этим никто не работает, не смог найти багтрекер.


Название: Re: QtCreator: Вызов функции в отладчике в watch
Отправлено: navrocky от Сентябрь 23, 2009, 13:40
По доброй традиции отвечу себе сам :)

Немного предыстории:
Захотелось мне при отладке смотреть дампы разных не стандартных объектов. Я (после дельфи) попробовал написать функцию для преобразования нужного мне объекта в строку, чтобы затем в watch вызывать ее и параметром передавать объект и смотреть его дамп в виде строки. Но отладчик меня жутко обломал, написав <not in scope>.

После большого количества танцев с бубном, выяснил, что все-таки в watch вычисляется результат любых выражений, даже вызовы функций с параметрами. Но возвращать сложные типы, такие как std::string, бессмысленно, т.к., видимо, возвращаемый объект освобождается еще до того как qtcreator попытается его отобразить.В итоге получается <not in scope>.

Я вышел из ситуации таким образом:
Написал специальный класс строка, тело которого статический массив на, например, 100 символов. И дамп-функция заполняет и возвращает именно его. Т.к. тело объект статично и деструктор его не разрушает, то в отладчике все отлично отображается.

Вот вырезка кода:
Код:
namespace debughelp
{

static const int string_size = 100;

class string
{
public:
    string(const char*);
    char* info;
    char data[string_size];
};

}

debughelp::string __showhex(void* buf, int sz);

PS. Надеюсь мои изыскания помогут другим в отладке. Интересно выслушать критику...


Название: Re: QtCreator: Вызов функции в отладчике в watch
Отправлено: SLiDER от Сентябрь 23, 2009, 21:28
Захотелось мне при отладке смотреть дампы разных не стандартных объектов.

Ну, если дело только в этом, то проще было расширить библиотеку debuger helper визуализаторами для ваших типов. Кстати, довольно странно что:

watch вычисляется результат любых выражений, даже вызовы функций с параметрами. Но возвращать сложные типы, такие как std::string, бессмысленно, т.к., видимо, возвращаемый объект освобождается еще до того как qtcreator попытается его отобразить.В итоге получается <not in scope>

в том же eclipse это же как-то работате, вероятно имеет смысл заслать future request или bugreport разработчикам.