Я работаю уже несколько лет как C ++ Developer, используя MS Visual Studio
в качестве рабочей платформы. Так как я в частном порядке предпочитаю использовать Linux, я недавно взял
шанс перенести мою рабочую среду в Linux.
Так как я оптимизирую свою среду Windows уже несколько лет,
конечно, оказывается, что некоторые вещи отсутствуют или работают не так, как ожидалось.
Таким образом, у меня есть несколько вопросов, на которые я пока не смог дать полезных ответов.
Давайте начнем следующую проблему, другие вопросы, вероятно, последуют позже.
Проблема в том, что я уже сталкивался несколько раз,
всякий раз, когда меня заставляли отлаживать специфичные для платформы ошибки на платформах, отличных от Windows.
Проще говоря: Как отобразить строки Unicode (в кодировке UCS2) при отладке в Linux?
Теперь еще несколько деталей, которые я до сих пор выяснил. Наш Lib использует внутренне Unicode
Строковый класс, который кодирует каждый символ как 16-битное значение Юникода (но мы не
поддержка кодирования нескольких слов, поэтому мы в основном можем использовать только кодируемое подмножество UCS2
UTF16, но это все равно охватывает почти все используемые скрипты).
Это уже ставит одну проблему, так как большинство платформ (т.е. linux / unix) учитывают
wchar_t
типы должны состоять из 4 байтов, тогда как в Windows это только 2 байта, таким образом
Я не могу просто привести внутренний буфер строк к (wchar_t *
), поэтому я не уверен,
если это действительно поможет любому отладчику.
Для GDB Я понял, что я могу вызывать функции из отлаженного кода, чтобы
печатать отладочные сообщения. Таким образом, я вставил специальную функцию в нашу библиотеку,
который может произвольно преобразовать строковые данные и записать их в новый буфер.
В настоящее время я транскодирую наш внутренний буфер в utf8, так как я ожидаю, что это
быть наиболее вероятно, чтобы работать.
Но пока это решает проблему только частично: если строка латинская,
тогда я теперь получаю читаемый вывод (тогда как нельзя напрямую печатать латиницу
данные, если это 16-битный код), но я также должен иметь дело с другими сценариями
(например, CJK (a.k.a. Hansi / Kanji), кириллица, греческий ...)
Я должен специально отлаживать данные с помощью таких сценариев, так как используемые сценарии напрямую
влиять на поток управления.
Конечно, в этих случаях я вижу только те символы ISO, которые соответствуют
байты, составляющие символ utf8, что делает отладку данных CJK еще более
загадочные тогда правильно отображаемые строки будут.
Обычно GDB позволяет установить несколько кодировок хоста и цели, поэтому
можно отправить правильный кодированный поток данных utf8 на консоль.
Но, конечно, я бы предпочел использовать IDE для отладки. В настоящее время я пытаюсь
чтобы подружиться с Eclipse и CDT, но для отладки я также протестировал kdgb.
В обоих приложениях я до сих пор мог получить только неправильно декодированные данные utf8.
С другой стороны, я однажды отлаживал проект Java в Eclipse на платформе Windows.
и все внутренние строки отображались правильно (но это приложение не было
используя нашу lib и соответствующие строки), таким образом, по крайней мере, в некоторых ситуациях
eclipse может правильно отображать символы Юникода.
Самым неприятным моментом для меня является то, что до сих пор я не мог даже придумать
любое доказательство того, что отображение истинных данных Unicode (т.е. не ISO-символов) работает
в любой установке в Linux (то есть, даже скрипты GDB для QStrings, которые я нашел, кажется
чтобы отображать только латинские буквы и пропустить остаток), но, конечно,
Кажется, почти каждое приложение Linux поддерживает данные Unicode, поэтому
должны быть люди вокруг, которые отлаживают истинные данные Unicode на платформах Linux
и я действительно не могу представить, что они все читают гекскоды вместо
прямое отображение строк Юникода.
Таким образом, любые указатели на настройки, которые позволяют отладку строк Unicode, основаны
для любых других строковых классов (например, QString) и / или IDE также приветствуется.