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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtCreator: Вызов функции в отладчике в watch  (Прочитано 4445 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Сентябрь 16, 2009, 12:47 »

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

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

Гугль в помощь
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Сентябрь 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. Надеюсь мои изыскания помогут другим в отладке. Интересно выслушать критику...
Записан

Гугль в помощь
SLiDER
Гость
« Ответ #2 : Сентябрь 23, 2009, 21:28 »

Захотелось мне при отладке смотреть дампы разных не стандартных объектов.

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

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

в том же eclipse это же как-то работате, вероятно имеет смысл заслать future request или bugreport разработчикам.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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