UnicodeString::Length() мешает отображению отладчика
Кажется, что отладчик подавляет просмотр содержимого 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" для ее длины)?
1 ответ
После некоторых экспериментов я теперь могу частично ответить на свой вопрос с потенциальным обходным путем. Замена "search.Length()" на "wcslen(search.c_str())", кажется, работает, по крайней мере, у него нет побочного эффекта отображения только адресов для UnicodeStrings в списке наблюдения и окнах локальных переменных. На данный момент я не проверил тщательно, если это в конечном итоге поднимает какую-то другую проблему. Но почему я должен делать это для такого фундаментального типа языка?