問題タブ [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.
delphi - Delphi 7、FastMM4 は回避策をインストールできません
私は sourceforge.net の を使用するアプリケーションに取り組んでFastMM4
います。FastMM4.pas
そのため、最初の uses 句に を追加しました。アプリケーションでは、このようなの後にbatch
ファイルを実行する必要がありますFinalizeMemoryManager;
finalization
unit 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
。
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'に送信する方法に固執しています。
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に記載されています が、同じリンクは同じテストを実行する以外の解決策を提示しませんまた。
delphi - デバッガー使用時に FastMM/DXE2 のみが報告されますか?
FastMM バージョン 4.99 を使用しようとしています ( の上部のコメントによるとFastMM4.pas
)。スタック トレースを使用してフル デバッグ モードを使用する手順に従い ましたが、IDE デバッガーで .exe を実行するとリークが見つかりました。例えば
しかし、コマンド プロンプトから、または Windows エクスプローラーでダブルクリックして実行可能ファイルを実行しようとすると、リークは報告されません。UnicodeString リークは偽物かもしれませんが、TIniFile リークが本物であることは確かです。デバッガーを使用していないときに FastMM レポート/ログ リークを作成するにはどうすればよいですか?
更新: このプロジェクトは madExcept 3.0n も使用します: .dpr ファイルには、uses 句の最初の項目として FastMM4 があります。これら2つを共存させるために他に何か必要ですか?
delphi - Delphiの抽象エラーの原因が不明ですか?
Delphi 7 プロジェクトでは、FastMM をインストールしました。その後すぐに、フォームの 1 つが終了時に抽象エラー メッセージを発行し始めたことに気付きました。これを広範囲にデバッグしましたが、これまでのところ理由が見つかりません。このエラー メッセージの通常の理由は、ここには当てはまらないようです。アプリケーションは抽象クラスを定義しません。また、TStrings などの使用の可能性についてフォームを検索しました。最も重要なことは、このフォームに変更を加えていないことです (そうではないと思います)。壊れたばかりです。
- 実装されていないメソッドを呼び出そうとする以外に、このエラーの原因として考えられるものは他にありますか?
- FastMM が、今まで隠れていたアプリケーションのあいまいなバグを有効にした可能性はありますか?
これらの質問に対する答えが「いいえ」の場合は、実装されていないメソッド呼び出しを引き続き検索し、他に何かが欠けていないことに安心します。
delphi - Delphi 7、FastMM、およびDUnitGUITestingが誤ったメモリリークで失敗したテスト
FastMMの誤検知で問題が発生しました。今回のリークは、フォームのテストの場合です。これは、ここで説明したものと非常によく似ています。
フォームとその中にいくつかの単純な古いVCLコントロールを取得しました。最初のテスト実行では、実際には存在しないリークが示されています。2回目の実行ではリークは発生しません。すべてのDUnitソースコードを検索しましたが、修正する理由が見つかりませんでした。誰かが私を助けることができますか?
次の理由により、テストを2回実行する余裕はありません。1。継続的インテグレーションで実行されます。2.一部のテストには実際に時間がかかり、2倍にするのは賢明ではありません。
DUnitGUIで最後の3つのオプションを確認しました。-シャットダウン時にメモリリークタイプを報告する-メモリリークが発生した場合はTestCaseに失敗する-SetUp/TearDownでメモリリークを無視する
サンプルコードは次のとおりです。
delphi - FastMM を含めると EInvalidTypecast エラーが発生するのはなぜですか?
これは、Delphi XE2 と FastMM 4.99、および Win7-64 マシン上の 32 ビット プログラムです。
FastMM を使用して、私が取り組んでいる小規模なプログラムをチェックしようとしていました。プログラムには、プロジェクトの自動作成フォーム リストにあるデータ モジュールが含まれています。データ モジュールには、TADOConnection オブジェクトのみが含まれます。
FastMM で FullDebugMode を有効にすると、プログラムを終了するときに無効な型キャスト エラーが発生します。原因はデータモジュールの解放にあるようです (エラーは で発生しますTADOConnection.GetADODataSet
)。なぜこれが起こっているのか誰にも示唆できますか?
delphi - インスタンスがメモリをリークしたカスタム構造の名前を取得する方法は?
私は FASTMM4 メモリ リーク レポートを通過し、すべての関連データをカスタムメイドの構造体/クラスに格納するパーサーに取り組んでいます。VirtualTreeViewを使用して、リークしたインスタンスを持つ各クラスをツリーのノードとして表示します。ツリー- 最初のノードが不明であることに注意してください。これは、FASTMM がメソッドAClassを呼び出して、天気がクラスかどうかを判断するためです。カスタム構造が見つかると、それらが不明としてマークされます。ほとんどのメモリ リークはこれらのカスタム構造とレコードから発生するため、レポート アナライザーはあまり効果的ではありません。
質問: DebugInfo または JVCL のような他のツールを使用してこれらのデバッグ シンボルを収集し、メモリ アドレスをメモリ リーク レポート ファイルにあるものと比較する方法はありますか? ツリーに UNKNOWN を表示するのをやめて、これらのカスタム構造の名前を表示したいと思います。私は Delphi プログラミングは初めてで、メモリ リークへの取り組みも初めてなので、どんな助けも大いに役立ちます。
delphi - シャットダウン ダイアログなしで FASTMM レポートを生成する
Delphi プロジェクトで、可能であればプログラムの実行中に FASTMM メモリ リーク レポートを生成し、シャットダウン時にそのレポートに追加して、プログラムを閉じるたびにこのダイアログを表示する必要がないようにしたいと考えています。
FMM でレポートを作成し、実行時に N 回編集することができない場合は、ダイアログが表示するよりもはるかに詳細なレポートを既に持っているため、少なくとも迷惑なダイアログを取り除きたいと思います。
delphi - FASTMM4を使用して、ファイルに書き込まずにレポートを生成する
Delphiで記述されたGUIでメモリリークを回避しようとしています(コードが数万行のコードであるため、単純な作業ではありません)。によって生成されたレポートを分析し、インスタンスをFASTMM
作成してきちんと保存するファイルパーサーを作成しました。TMemoryLeak
VirtualNodeTree
ただし、問題は、そのようなレポートを生成してから解析するのに時間がかかることです。ボタンをクリックするだけで分離して呼び出すことができた、と呼ばれるFMMメソッドがありCheckBlocksOnShutDown
ますが、これもまったく新しいレポートを作成し、トラバースして、レポート全体をNodeTreeに格納する必要があります。を繰り返しクリックすることで、作成されている新しいメモリリークをほぼリアルタイムで表示したいと思います。
FASTMMコードを微調整して、ファイルに何も書き込まずに、「外出先」でメモリリークインスタンスを作成できるようにしたいと思います。これは実行可能ですか?(同様の質問)