无法在fpc调试输出中生成行号

问题描述 投票:1回答:1

我有一个非常简单的测试程序(test.pas),如下所示,我正在尝试生成内存跟踪,但无法获得包含行号等的任何详细输出。

program test;

var
  intPointer:^integer;

begin
  new(intPointer); //Allocate some memory
  intPointer^:=5;
  // dispose(intPointer);

  WriteLn('Hello World');

end.

我跑了以下。

fpc -g -gh -gl test.pas; ./test

这是我得到的输出。

Hello World
Heap dump by heaptrc unit
1 memory blocks allocated : 2/8
0 memory blocks freed     : 0/0
1 unfreed memory blocks : 2
True heap size : 327680 (32 used in System startup)
True free heap : 327488
Should be : 327512
Call trace for block $00000001000CA0C0 size 2

在这个玩具示例中,我可以看出intPointer没有被处理掉,但对于更大的应用程序,我希望有更多的见解。在线的其他示例似乎显示原始文件中分配内存的行号,我想知道我做错了什么。

有什么建议?

编辑:

添加了另一个示例(第9.2小节),我无法获取行号信息。

http://www.math.uni-leipzig.de/pool/tuts/FreePascal/units/node10.html

freepascal
1个回答
1
投票

有时lineinfo无法准确确定源文件,尤其是堆栈跟踪中的最高调用。如果要查看文件名,则需要将代码从主begin / end语句移动到过程中。它不是理想的解决方案,但它使调试更容易一些。

program test;

procedure PointerTest;
var
  intPointer:^integer;
begin
  new(intPointer); //Allocate some memory
  intPointer^:=5;
  // dispose(intPointer);

  WriteLn('Hello World');
end;

begin
  PointerTest;
end.

此外,似乎现在单位exeinfo(由lineinfo使用)仅支持ppc32 architecture on macOS

© www.soinside.com 2019 - 2024. All rights reserved.