按【让fpc/lazarus支持中文变量/过程/函数/中文控件名称】处理后已可以使用中文变量,但在debug为FpDebug模式时断点不能显示中文变量的值和未定义的中文变量在Messages显示乱码。
存在的问题:
1、不显示中文变量的值:
存在的问题:
1、不显示中文变量的值:
2 、在IDE的Messages未定义的中文变量显示乱码:
解决方法:
1、不显示中文变量的值:
打开lazarus\components\fpdebug\fppascalparser.pas
添加红色代码。
function CheckOpenBracket: Boolean; var p: PChar; begin p := TokenEndPtr; while p^ in [' ', #9, #10, #13] do inc(p); Result := p^ = '('; end; procedure AddIdentifier; var intr: TFpIntrinsicFunc; begin while TokenEndPtr^ in ['a'..'z', 'A'..'Z', '_', '0'..'9', '$',#$80..#$ff] do //2024.09.11 LBZ lazarus 3.4为第2709行
inc(TokenEndPtr); // TODO: Check functions not, and, in, as, is ... if (CurPart <> nil) and (CurPart.CanHaveOperatorAsNext) then case TokenEndPtr - CurPtr of
if (FIntrinsicPrefix = ipColon) and (CurPtr^ = ':') then begin inc(CurPtr); AddIntrinsic; end else case CurPtr^ of '@' : AddPart(TFpPascalExpressionPartOperatorAddressOf); '^': AddRefOperator; // ^A may be #$01 '.': HandleDot; '+', '-' : AddPlusMinus; '*', '/' : AddPart(TFpPascalExpressionPartOperatorMulDiv); '(': HandleRoundBracket; ')': CloseBracket(TFpPascalExpressionPartRoundBracket); '[': HandleSqareBracket; ']': CloseBracket(TFpPascalExpressionPartSquareBracket); ',': HandleComma; '=', '<', '>': HandleCompare;//TFpPascalExpressionPartOperatorCompare '''', '#': AddConstChar; '0'..'9', '$', '%', '&': AddConstNumber; 'a'..'z', 'A'..'Z', '_',#$80..#$ff: AddIdentifier; //2024.09.11 LBZ lazarus 3.4为第3056行 else begin SetParserError(fpErrPasParserUnexpectedToken_p); break; end; end; if not FValid then break;
2 、在IDE的Messages(lazarus for linux版本无此问题)未定义的中文变量显示乱码是ConsoleToUTF8引起的,已报官方修复。修复前可按以下方法处理:(2024-10-12更新)
打开\lazarus\ide\etfpcmsgparser.pas,找到:
function TIDEFPCParser.ToUTF8(const Line: string): string;//lazarus 3.4在第3227行
添加红色代码
function TIDEFPCParser.ToUTF8(const Line: string): string; begin if PC_FullVersion>=20701 then {$ifdef MSWINDOWS} //2024.09.13 LBZ if (pos('"',Line)>0) then Result:= SysToUTF8(Line) //FPC编译信息需要用SysToUTF8 else Result:=ConsoleToUTF8(Line) //windows带路径信息时需要用ConsoleToUTF8 {$else} //2024.09.13 LBZ Result:=ConsoleToUTF8(Line) //2024.09.13 LBZ {$endif} //2024.09.13 LBZ else begin {$IFDEF MSWINDOWS} Result:=WinCPToUTF8(Line); {$ELSE} Result:=SysToUTF8(Line); {$ENDIF} end; end;
修改完成后重新编译lazarus。
修复后,lazarus对中文的支持已算比较满意,不过在debug模式为GDB时中文变量的值提示还存在问题,还要继续研究,等完成后再分享给大家,或你已解决,也希望您能和我分享,谢谢!
【原创】今天终于解决lazarus debug模式为GDB时中文变量显示出错的问题(2024-10-08)
2024-10-12的修复方法解决了在windows下中文目录显示乱码的问题