Название: 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 PS. Надеюсь мои изыскания помогут другим в отладке. Интересно выслушать критику... Название: Re: QtCreator: Вызов функции в отладчике в watch Отправлено: SLiDER от Сентябрь 23, 2009, 21:28 Захотелось мне при отладке смотреть дампы разных не стандартных объектов. Ну, если дело только в этом, то проще было расширить библиотеку debuger helper визуализаторами для ваших типов. Кстати, довольно странно что: watch вычисляется результат любых выражений, даже вызовы функций с параметрами. Но возвращать сложные типы, такие как std::string, бессмысленно, т.к., видимо, возвращаемый объект освобождается еще до того как qtcreator попытается его отобразить.В итоге получается <not in scope> в том же eclipse это же как-то работате, вероятно имеет смысл заслать future request или bugreport разработчикам. |