Проблемы отладки с libc ++ в Xcode 4.4

У меня проблема, когда я пытаюсь отладить на итерации списка на C ++.

Я сделал простое тестовое приложение:

int main(int argc, const char * argv[])
{
// insert code here...
std::cout << "Hello, World!\n";

std::list<int> list;
list.push_back(1);
list.push_back(2);
--> list.push_back(3);    //Line before step over
for (std::list<int>::const_iterator i = list.begin(); i != list.end(); i++)
{
std::cout << *i << std::endl;
}
return 0;
}

Во время отладки, когда я нахожусь в строке, отмеченной стрелкой, когда я перехожу, он начинает вмешиваться в код из файла c ++: ‘list’.
Я должен перешагнуть как 15 раз, пока он, наконец, не доберется до кода внутри оператора for.

Эта проблема возникает только в Xcode 4.4. В Xcode 4.3 отладка работает отлично.

Здесь есть несколько разных сценариев с разными результатами:

  1. Используйте LLVM GCC 4.2 в качестве компилятора → Работает нормально.
  2. Используйте Apple LLVM compiler 4.0 и установите libstdc ++ (стандартная библиотека GNU C ++) для стандартной библиотеки C ++ → Работает нормально.
  3. Компилятор Apple LLVM 4.0 и набор libc ++ (стандартная библиотека LLVM C ++ с поддержкой C ++ 11) для стандартной библиотеки C ++ → Проблема возникает.

В проекте, над которым я работаю, мы используем компилятор Apple LLVM 4.0 и libc ++ (стандартная библиотека LLVM C ++ с поддержкой C ++ 11), поэтому мне нужно решить эту проблему для сценария 3).

Кто-нибудь знает, что может происходить, и есть ли решение для этого?

6

Решение

Это проблема взаимодействия lldb / llvm с libc ++, я видел это с тех пор, как мы его включили, хотя я думаю, что только разработчики libc ++ / lldb смогут определить, что это такое.

Хотя это не решение проблемы, похоже, это проблема из командной строки с llvm 3.1 (текущий выпуск с Xcode 4.5). Если я сделаю:

clang++ -g -O0 -stdlib=libc++ -std=c++11 test.cpp -o test
lldb test
breakpoint set --file test.cpp --line 8

… и затем попытайтесь использовать ‘n’, чтобы пройти до конца main, он переместится в источник списка по адресу:

* thread #1: tid = 0x1c03, 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543, stop reason = step over
frame #0: 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543
540      {
541  #if _LIBCPP_DEBUG_LEVEL >= 2
542          return iterator(__end_.__next_, this);
-> 543  #else
544          return iterator(__end_.__next_);
545  #endif
546      }

Я согласен, это действительно замедляет время разработки / отладки, и об этом следует сообщить лдб разработчики

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]