У меня проблема, когда я пытаюсь отладить на итерации списка на 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 отладка работает отлично.
Здесь есть несколько разных сценариев с разными результатами:
В проекте, над которым я работаю, мы используем компилятор Apple LLVM 4.0 и libc ++ (стандартная библиотека LLVM C ++ с поддержкой C ++ 11), поэтому мне нужно решить эту проблему для сценария 3).
Кто-нибудь знает, что может происходить, и есть ли решение для этого?
Это проблема взаимодействия 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 }
Я согласен, это действительно замедляет время разработки / отладки, и об этом следует сообщить лдб разработчики
Других решений пока нет …