問題タブ [fastmm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3121 参照

delphi - Delphi 7、FastMM4 は回避策をインストールできません

私は sourceforge.net の を使用するアプリケーションに取り組んでFastMM4ますFastMM4.pasそのため、最初の uses 句に を追加しました。アプリケーションでは、このようなの後にbatchファイルを実行する必要がありますFinalizeMemoryManager;finalizationunit FastMM4;

RunTheBatFileAtTheEndの私のコードは次のとおりです。

このためSysUtils,shellapiに、fastmm4 ユニットの uses 句で使用する必要があります。しかし、それらを使用すると、このメッセージが表示されます ここに画像の説明を入力

しかし、使用から削除SysUtils,shellapiすると機能します。まだ fastmm4 のすべての機能をインストールする必要がありますがSysUtils,shellapi、fastmm4 はインストールされていません。

私は自分のユニットを持っていますが、そのファイナライズは fastmm4 のファイナライズの前に実行されます。

誰でもこの問題を解決する方法を教えてもらえますか?

編集-1

私のアプリケーション

EDIT-2 :

(@SertacAkyuzの回答後)、削除SysUtilsして機能しましたが、バッチファイルを実行して外部アプリケーションを開く必要がありますRunTheBatFileAtTheEnd. 理由は..FastMM4がfinalization. sExeNameファイルsFilePaTh(.nam)を実行するアプリケーションです。誰でもこれを行う方法を教えてもらえますか? なしuninstalling FastMM4

0 投票する
1 に答える
1147 参照

delphi - Delphi 7、アプリケーションパスの取得とアプリケーションのオープンにFastMM4を使用

Delphi 7によって作成されたログを実行して表示するアプリケーションに取り組んでいますFastMM4.pas

アプリケーションはシステムのどこにでもインストールされます。私はFastMM4.pasそれがCreateProcess(要するに私のアプリケーションを実行する)ように変更しました私の 前の質問からのコードとSertacAkyuzの答え

leakTracker.exe、fastmm4のログファイルをパラメータとして取り込み、ファイルを開いて表示します。変更fastMM4.pasされたものは、他のアプリケーションで使用されます。

pathこれは正常に機能しますが、アプリケーションパスを取得するためにハードコーディングしました。

FAstMM4.pas finalization私はこれを持っています

私は持つことができないので

*1 - SysUtils.pas--FastMM4.passで、fastmmm4がアンインストールされるため

*2 - Registry.pas-インストールパスを検索しleakTrackerますが、fastmm4をアンインストールします

*3 - paramstr(0) -アプリケーションの終了時にエラーが発生します。

*4 - unitWithSysRegis--SysUtilsを使用すると、Fastm4のuses句でもレジストリを使用できません。

leakTracker.exeそのため、CreateProcessを介してログファイルのパスを取得して`leakTracker.exe'に送信する方法に固執しています。

0 投票する
4 に答える
1195 参照

delphi - Delphi 7、DUnit、FastMM で文字列が正しく報告されない

DUnit と FastMM を使用してファイナライズされていないメモリ ブロックをキャッチしていますが、バグがあるようです。FastMM、DUnit、または Delphi 自体にあるかどうかはわかりませんが、次のようになります。

  • テスト ケースに内部文字列があると、テストがメモリ リークで失敗します。DUnit GUI を閉じずに同じテストを再度実行すると、テストは成功します。DUnit GUI テストでも同じことが起こります。同じ理由からだと思います。私のアプリにはリークはありません。その証拠は、FastMM がそのような場合にリーク レポートを生成しないことです。

  • 質問 1: AllowedMemoryLeakSize を設定せずにそれらを無視する方法はありますか

  • 質問 2: Delphi 7 を使用していますが、Delphi XE でこの修正が行われた場合、何かニュースはありますか?

  • 私の実際のテスト構成:

    • test.FailsOnNoChecksExecuted := True;
    • test.FailsOnMemoryLeak := True;
    • test.FailsOnMemoryRecovery:= False;
    • test.IgnoreSetUpTearDownLeaks:= True;

これがサンプルコードです(実装のみ)

ありがとう!!!!

更新:私が直面している問題はhttp://members.optusnet.com.au/mcnabp/Projects/HIDUnit/HIDUnit.html#memoryleakdetectionに記載されています が、同じリンクは同じテストを実行する以外の解決策を提示しませんまた。

0 投票する
1 に答える
821 参照

delphi - デバッガー使用時に FastMM/DXE2 のみが報告されますか?

FastMM バージョン 4.99 を使用しようとしています ( の上部のコメントによるとFastMM4.pas)。スタック トレースを使用してフル デバッグ モードを使用する手順従い ましたが、IDE デバッガーで .exe を実行するとリークが見つかりました。例えば

FastMM リーク レポート ダイアログ

しかし、コマンド プロンプトから、または Windows エクスプローラーでダブルクリックして実行可能ファイルを実行しようとすると、リークは報告されません。UnicodeString リークは偽物かもしれませんが、TIniFile リークが本物であることは確かです。デバッガーを使用していないときに FastMM レポート/ログ リークを作成するにはどうすればよいですか?

更新: このプロジェクトは madExcept 3.0n も使用します: .dpr ファイルには、uses 句の最初の項目として FastMM4 があります。これら2つを共存させるために他に何か必要ですか?

0 投票する
5 に答える
11574 参照

delphi - Delphiの抽象エラーの原因が不明ですか?

Delphi 7 プロジェクトでは、FastMM をインストールしました。その後すぐに、フォームの 1 つが終了時に抽象エラー メッセージを発行し始めたことに気付きました。これを広範囲にデバッグしましたが、これまでのところ理由が見つかりません。このエラー メッセージの通常の理由は、ここには当てはまらないようです。アプリケーションは抽象クラスを定義しません。また、TStrings などの使用の可能性についてフォームを検索しました。最も重要なことは、このフォームに変更を加えていないことです (そうではないと思います)。壊れたばかりです。

  1. 実装されていないメソッドを呼び出そうとする以外に、このエラーの原因として考えられるものは他にありますか?
  2. FastMM が、今まで隠れていたアプリケーションのあいまいなバグを有効にした可能性はありますか?

これらの質問に対する答えが「いいえ」の場合は、実装されていないメソッド呼び出しを引き続き検索し、他に何かが欠けていないことに安心します。

0 投票する
2 に答える
839 参照

delphi - Delphi 7、FastMM、およびDUnitGUITestingが誤ったメモリリークで失敗したテスト

FastMMの誤検知で問題が発生しました。今回のリークは、フォームのテストの場合です。これは、ここで説明したものと非常によく似ています。

フォームとその中にいくつかの単純な古いVCLコントロールを取得しました。最初のテスト実行では、実際には存在しないリークが示されています。2回目の実行ではリークは発生しません。すべてのDUnitソースコードを検索しましたが、修正する理由が見つかりませんでした。誰かが私を助けることができますか?

次の理由により、テストを2回実行する余裕はありません。1。継続的インテグレーションで実行されます。2.一部のテストには実際に時間がかかり、2倍にするのは賢明ではありません。

DUnitGUIで最後の3つのオプションを確認しました。-シャットダウン時にメモリリークタイプを報告する-メモリリークが発生した場合はTestCaseに失敗する-SetUp/TearDownでメモリリークを無視する

サンプルコードは次のとおりです。

0 投票する
2 に答える
183 参照

delphi - FastMM を含めると EInvalidTypecast エラーが発生するのはなぜですか?

これは、Delphi XE2 と FastMM 4.99、および Win7-64 マシン上の 32 ビット プログラムです。

FastMM を使用して、私が取り組んでいる小規模なプログラムをチェックしようとしていました。プログラムには、プロジェクトの自動作成フォーム リストにあるデータ モジュールが含まれています。データ モジュールには、TADOConnection オブジェクトのみが含まれます。

FastMM で FullDebugMode を有効にすると、プログラムを終了するときに無効な型キャスト エラーが発生します。原因はデータモジュールの解放にあるようです (エラーは で発生しますTADOConnection.GetADODataSet)。なぜこれが起こっているのか誰にも示唆できますか?

0 投票する
1 に答える
379 参照

delphi - インスタンスがメモリをリークしたカスタム構造の名前を取得する方法は?

私は FASTMM4 メモリ リーク レポートを通過し、すべての関連データをカスタムメイドの構造体/クラスに格納するパーサーに取り組んでいます。VirtualTreeViewを使用して、リークしたインスタンスを持つ各クラスをツリ​​ーのノードとして表示します。ツリー- 最初のノードが不明であることに注意してください。これは、FASTMM がメソッドAClassを呼び出して、天気がクラスかどうかを判断するためです。カスタム構造が見つかると、それらが不明としてマークされます。ほとんどのメモリ リークはこれらのカスタム構造とレコードから発生するため、レポート アナライザーはあまり効果的ではありません。

質問: DebugInfo または JVCL のような他のツールを使用てこれらのデバッグ シンボルを収集し、メモリ アドレスをメモリ リーク レポート ファイルにあるものと比較する方法はありますか? ツリーに UNKNOWN を表示するのをやめて、これらのカスタム構造の名前を表示したいと思います。私は Delphi プログラミングは初めてで、メモリ リークへの取り組みも初めてなので、どんな助けも大いに役立ちます。

0 投票する
1 に答える
448 参照

delphi - シャットダウン ダイアログなしで FASTMM レポートを生成する

Delphi プロジェクトで、可能であればプログラムの実行中に FASTMM メモリ リーク レポートを生成し、シャットダウン時にそのレポートに追加して、プログラムを閉じるたびにこのダイアログを表示する必要がないようにしたいと考えています。

FMM でレポートを作成し、実行時に N 回編集することができない場合は、ダイアログが表示するよりもはるかに詳細なレポートを既に持っているため、少なくとも迷惑なダイアログを取り除きたいと思います。

0 投票する
0 に答える
397 参照

delphi - FASTMM4を使用して、ファイルに書き込まずにレポートを生成する

Delphiで記述されたGUIでメモリリークを回避しようとしています(コードが数万行のコードであるため、単純な作業ではありません)。によって生成されたレポートを分析し、インスタンスをFASTMM作成してきちんと保存するファイルパーサーを作成しました。TMemoryLeakVirtualNodeTree

ただし、問題は、そのようなレポートを生成してから解析するのに時間がかかることです。ボタンをクリックするだけで分離して呼び出すことができた、と呼ばれるFMMメソッドがありCheckBlocksOnShutDownますが、これもまったく新しいレポートを作成し、トラバースして、レポート全体をNodeTreeに格納する必要があります。を繰り返しクリックすることで、作成されている新しいメモリリークをほぼリアルタイムで表示したいと思います。

FASTMMコードを微調整して、ファイルに何も書き込まずに、「外出先」でメモリリークインスタンスを作成できるようにしたいと思います。これは実行可能ですか?(同様の質問