Кажется, что отладчик подавляет просмотр содержимого 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» для ее длины)?