秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
按【让fpc/lazarus支持中文变量/过程/函数/中文控件名称】处理后已可以使用中文变量,但在debug为FpDebug模式时断点不能显示中文变量的值和未定义的中文变量在Messages显示乱码。
存在的问题:
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下中文目录显示乱码的问题

 

posted on 2024-09-13 19:59  秋·风  阅读(69)  评论(0编辑  收藏  举报