Когда я отладку C++ (в clion)
Я не могу смотреть «глобальных строк» , я попытался проверить еще тип, но он работал хорошо.
вара создать не удалось создать изменяемый объект
Кроме того, я пробовал местный номер, и я тоже смотрел его ?!
Я не могу смотреть «глобальных строк» , я попытался проверить еще тип, но он работал хорошо.
вара создать не удалось создать изменяемый объект
Кроме того, я пробовал местный номер, и я тоже смотрел его ?!
Только в случае, вопрос теперь отслеживаются как CPP-8693.
Основная причина связана с libstdC++ dual ABI. Глобальные символы std::string
типов искалечены по-разному, что, в свою очередь, смущает GDB.
В выпуске GCC 5.1 libstdC++ представила новую библиотеку ABI, которая включает в себя новые реализации
std::string
иstd::list
. Эти изменения были необходимы для соответствия стандарту C++ 2011 года, который запрещает строки «Copy-On-Write» и требует, чтобы списки отслеживали их размер.
Учитывая следующий код:
std::string global_var = "Hi there!";
static std::string static_var = "Hello";
Вот связанные nm
выхода:
0000000000602240 B _Z10global_varB5cxx11
0000000000602280 b _ZL10static_var
Возможного обходного пути, чтобы отключить C++ 11 ABI. В CMakeLists.txt, добавьте следующую строку сразу после set(CMAKE_CXX_STANDARD 11)
линии, если таковые имеются:
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
Это делает символьные имена, чтобы быть подогнаны по-разному, таким образом, GDB счастлив снова:
0000000000602238 B global_var
0000000000602248 b _ZL10static_var
Дон Не размещайте ссылки на изображения текста. Скопируйте-вставьте фактический текст, как текст, в тело вопроса. Пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask), и узнайте, как создать [Минимальный, Полный и Подтверждаемый пример] (http: // stackoverflow. ком/помощь/mcve). –
Что касается вашей проблемы, какую версию Clion вы используете? Я помню, что в ранних версиях в режиме отладчика были проблемы с 'std :: string', но это исправлено уже довольно давно. –
non const 'char *' для строковых литералов устарели (чтобы остановить попытку изменить строковый литерал), попробуйте 'const char * f =" RBYG ";' – George