每当当前函数包含 UnicodeString::Length() 调用时,调试器似乎会禁止在“局部变量”和“监视”窗口中查看 UnicodeString 的内容。
运行 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”作为它的长度),有什么想法可以让“搜索”的内容出现吗?