UnicodeString :: Length () мешает отображению отладчика - PullRequest
1 голос
/ 26 апреля 2019

Кажется, что отладчик подавляет просмотр содержимого UnicodeString в окнах Local Variable и Watch всякий раз, когда текущая функция содержит вызов UnicodeString :: Length ().

Запуск C ++ Builder 10.3 Rio Enterprise (обновлен до10.31, чтобы попытаться решить проблему), где я начал новый проект, добавил кнопку и вставил следующий код для кнопки.Это урезанная версия большого фрагмента кода для отслеживания и воспроизведения проблемы.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TFDQuery* qry = new TFDQuery(NULL);

    UnicodeString search = "SELECT *\rFROM Client\rWHERE id>0;";
    UnicodeString currLine;
    int to, len;

    qry->SQL->Clear();

    to = search.Pos("\r");
    while (to > 0) {
        currLine = search.SubString(1, to-1);

        qry->SQL->Add(currLine);

        //len = search.Length()-1;  // Offending line
        search = search.SubString(to+1, 999999);
        to = search.Pos("\r");
    }
    currLine = search;

    qry->SQL->Add(currLine);
}

На рисунке ниже показаны два разных прогона этого кода.Один в точности как показано выше (с одной закомментированной строкой).Другие показаны с включенной строкой.

Меня беспокоит то, что отладчик показывает только видимый адрес переменной с именем "search", и если я его раскрываю, он показывает "????", а несодержимое переменной, как показано стрелкой.Также обратите внимание, что точка останова находится выше линии, которая заставляет отладчик переключать представления.Любые идеи, как я могу получить содержимое «поиска», если я на самом деле вычислю длину подстроки (вместо размещения «999999» для ее длины)?

Image showing debugger difference between including the length of string or not

1 Ответ

0 голосов
/ 27 апреля 2019

После некоторых экспериментов я теперь могу частично ответить на свой вопрос с потенциальным обходным путем.Замена «search.Length ()» на «wcslen (search.c_str ())», кажется, работает, по крайней мере, у него нет побочного эффекта отображения только адресов для UnicodeStrings в списке наблюдения и окнах локальных переменных.На данный момент я не проверил тщательно, если это в конечном итоге поднимает какую-то другую проблему.Но почему я должен делать это для такого фундаментального типа языка?

...