2017-12-05 10 views
1

私は以下のような非常に簡単なテストプログラム(test.pas)を持っていますが、メモリトレースを生成しようとしていますが、行番号などを含む詳細な出力は得られません。fpcデバッグ出力に行番号を生成できません

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)。特にスタックトレースのトップ呼び出しのために、正確にソースファイルを決定することはできませんlineinfoたまに

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

+0

バージョン?ターゲット?数日前に新しいリリースが出ました。 –

+0

私はfpc 3.0.2を使用しています。これはosxで実行しています。 – kdheepak

答えて

1

。ファイル名を見たい場合は、コードをメインの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. 

また、今(lineinfoで使用されている)ユニットexeinfoのみppc32 architecture on macOSをサポートしているようです。

+0

返事Alexeyに感謝します。前と同じようにコードを実行すると同じ出力が得られます。アプリケーションを実行するときの出力を共有できますか? '' 'fpc -g -gh -gl main.pas; heaptrc部によって./main のHello World ヒープダンプが 1つのメモリブロックが割り当てられた:2/8 0のメモリブロックは解放さ:0/0 1未解放メモリブロック:2 真のヒープサイズ:327680(32システムの起動に使用されます) 真の空きヒープ:327488 は次のようになります。ブロック$ 00000001000CA0C0サイズ用327512 コール・トレースが2 '' ' は私が手出力には行番号はありません。 – kdheepak

+0

https://pastebin.com/ZshBiHXEですが、これはLinux上にあります。 –

+0

それはとても奇妙です。同じコンパイルコマンドで私のMac上では、行番号の出力がありません。 – kdheepak

関連する問題