Qt странное поведение

0

он может быть дублирован моим предыдущим вопросом, но я действительно обескуражен. Теперь я переношу приложение Windows Qt на Linux Ubuntu. Он составлен без проблем. Но во время отладки или запуска происходит что-то странное

Изображение 174551

это скриншот, который я сделал во время отладки. Вскоре у меня есть 2 синглтона - CoreManager и Config. Нанимаем, я пытаюсь получить один из них - CoreManager. Но отладчик показывает это как экземпляр Config! Это просто невозможно!

Здесь часть кода CoreManager:

CoreManager * ptr = NULL;

CoreManager *CoreManager::instance()
{
    if(ptr == NULL) ptr = new CoreManager();
    return ptr;
}

В Windows это работало без проблем. Оба класса синглтонов находятся в dll btw.

  • Ubuntu 13.10 x64
  • Qt 5.2.0 64 бит (также попробовал 5.2.1 5.2.2 из git)
  • gcc 4.8
  • gdb 7.6.1
  • 0
    Проверяли ли вы значение и тип ptr в отладчике до и после вызова CoreManager :: instance ()?
  • 0
    Странно, но ptr указывает на экземпляр Config. Просто невозможно! ptr инициализируется при вызове first instance () и должен иметь значение NULL. Я поместил точку останова в функцию instance () и при первом вызове ptr уже был инициализирован с помощью Config ... Как это может быть? !! Я проверил это сейчас в Windows, и оно идет как ожидалось - сначала ptr равен NULL, а после того, как instance () был вызван, он инициализирован с экземпляром CoreManager.
Показать ещё 4 комментария
Теги:
qt
gdb
qt5

1 ответ

0

Это действительно похоже на ошибку Qt Creator (или менее вероятную ошибку gdb).

В строке меню в Qt Creator, вы можете открыть окно/Просмотры/"Debugger Вход" и введите print cm команду поля "Command", чтобы увидеть, что GDB говорят вам о cm символе.

  • 0
    Да, это похоже на ошибку, просто потому, что невозможно то, что я вижу в отладчике)) Теперь я обратил внимание на то, что переменные cm и config имеют одинаковый адрес, поэтому может быть какое-то смещение памяти здесь неверно или что-то еще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню