我有一个非常简单的测试程序(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
有时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。