You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Lazarus IDE中调试泛型TFPGMap字典的键值对

调试TFPGMap(TDictionaryStrInt)键值对的方法

我懂你现在的困扰——用FGL库的TFPGMap(也就是你自定义的TDictionaryStrInt)调试时,只能看到一堆内存地址和内部字段,根本没法直接查看里面的键值对,这确实是这类容器在默认调试环境下的常见痛点。下面给你几个实用的解决办法:

方法1:给Lazarus/CodeTyphon添加调试可视化脚本

如果你用的是Lazarus或CodeTyphon,可以通过自定义调试可视化脚本,让调试器直接解析并显示Map的内容:

  • 打开IDE的Tools > Options > Debugger > Visualizers
  • 点击Add,在Class Name栏填写TFPGMap(或者你自己定义的TDictionaryStrInt)
  • 在Visualizer Code里粘贴这段适配string/integer类型的脚本:
    function TFPGMapVisualizer(Obj: TObject): string;
    var
      Map: TFPGMap<string, integer> absolute Obj;
      I: Integer;
    begin
      Result := 'TDictionaryStrInt (Count=' + IntToStr(Map.Count) + ')';
      if Map.Count > 0 then
      begin
        Result := Result + #13#10;
        for I := 0 to Map.Count - 1 do
          Result := Result + Format('[%d] Key="%s", Value=%d', [I, Map.Keys[I], Map.Data[I]]) + #13#10;
      end;
    end;
    
  • 保存设置后重启调试器,下次再查看这个Map变量时,就能直接看到所有键值对的明细了。

方法2:临时添加遍历代码输出内容

如果不想折腾可视化配置,也可以在调试阶段临时加一段遍历代码,把键值对打印到控制台:

var
  MyDict: TDictionaryStrInt;
  I: Integer;
begin
  // 假设MyDict是你要调试的Map实例
  for I := 0 to MyDict.Count - 1 do
    Writeln(Format('Key: %s | Value: %d', [MyDict.Keys[I], MyDict.Data[I]]));
end;

这段代码会把所有条目输出到控制台,调试完成后记得删掉或者注释掉就行。

方法3:手动在监视窗口解析内部结构

虽然麻烦,但应急时可以手动展开内部字段查看:

  • 在监视窗口里展开你的Map变量,依次打开TFPSMAP→TFPSLIST
  • 找到FList字段,这是存储键值对的数组。每个元素是一个复合结构,对应你的键和值
  • 针对你的string/integer类型,在监视窗口里输入:
    • 查看第一个键:PString(@MyDict.FList[0])^
    • 查看对应的值:PInteger(@MyDict.FList[0]+4)^
      以此类推,逐个查看每个条目的内容。

额外小提示

如果经常要调试FGL容器,建议把可视化脚本存成模板,或者找找Lazarus社区的插件——很多第三方插件已经内置了FGL容器的调试可视化支持,能省不少事。

内容的提问来源于stack exchange,提问作者vaso123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:49