問題タブ [crtdbg.h]
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.
c++ - WinCE C / C +ランタイムライブラリでリークを検出するにはどうすればよいですか?
crtdbg.hヘッダーを使用したWin32の基本的なリーク検出の可能性は知っていますが、このヘッダーはCE CRTライブラリヘッダーでは使用できません(最新のSDK v6.1を使用しています)。
VC9.0を使用したWinCE/ARMV4I構成でリークを自動的に検出する方法を知っている人はいますか?クラス階層の新規/削除をオーバーライドしたくないので、すぐに使用してテスト済みのコードを使用したいと思います。
c++ - VisualStudio_CrtDumpMemoryLeaksは常にオブジェクトダンプをスキップします
CRTメモリリーク検出を使用しようとしていますが、MicrosoftVisualStudioで次のメッセージが表示され続けます。「メモリリークが検出されました-オブジェクトダンプをスキップします。」私はそれを実際に実行してオブジェクトダンプを取得することはできません。
運が悪かったので、メモリリーク検出に関するMicrosoftの記事(http://msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx )の指示に従いました。
私のstdafx.hには(プロジェクト全体を再構築しました):
私のアプリケーションのエントリポイントには、次のものがあります。
また、ファイル名と行番号がMicrosoftがアドバタイズした形式で表示されることを期待しています。
私はオブジェクトダンプを取得することさえできませんでしたが、他の人がこれらの線に沿って何かを見ていると言っていることに気づきました(_CRTDBG_MAP_ALLOCが定義されていても):
new演算子とdelete演算子のオーバーライドに時間をかけたくないので、CRTデバッグが役立つことを期待していました。これがうまくいかない場合は、new演算子とdelete演算子をオーバーライドしてしまう可能性がありますが、実際には、ファイル名と行番号(指を交差させる)を使用して割り当て情報を取得したいと思います。
ありがとう、キリル
c++ - Boost 使用時のメモリ リーク検出
_CRTDBG_MAP_ALLOC を使用してメモリ リーク情報、特にファイルと行番号を取得したいのですが、最後に取得できません。私はこのようなものしか得ません:
{130} 0x00695128 の通常ブロック、16 バイト長。データ: <\ E Pi > 5C A5 45 01 02 00 00 00 01 00 00 00 E8 50 69 00
これはすべてのインクルードの前にある必要があることがわかりました:
そして、すべてのソースファイルのすべてのインクルードの後にこれを追加することを推奨する人もいます:
ただし、main.cpp で明示的にメモリ リークを追加すると、出力に行番号が表示されます。だからそれはうまくいきますが、すべてではありません...
Boost ライブラリを使用しているため、メモリ リークはすべてこれらのどこかで発生していると思われます... (shared_ptr ?)。しかし、これらのメモリリークがどこから来たのかを知るにはどうすればよいでしょうか?
memory-leaks - _CrtSetBreakAllocがブレークポイントを引き起こさないのはなぜですか?
VisualCRTのメモリリーク検出ルーチンを使用してい<crtdbg.h>
ます。私が呼び出す_CrtDumpMemoryLeaks
と、プログラムのすべての呼び出しで1つの割り当てが一貫して報告されます。
アドレスは異なりますが、{133}
常に同じです。
メモリ割り当て番号にブレークポイントを設定する方法に関するMSDNの指示によると、この呼び出しで133番目の割り当てにブレークポイントを設定できるはずです。
また、実際に133に設定されているウォッチウィンドウで確認することもできます{,,msvcr90d.dll}_crtBreakAlloc
。プログラムが終了した後も、リークレポートには#133が(いくつかの高い数値とともに)表示されますが、ブレークポイントは発生しません。なぜこれが発生する可能性があり、ブレークポイントを発生させるにはどうすればよいですか?
潜在的に関連する情報:
- VS2008、「マルチスレッドデバッグDLL」CRTを使用
- 私のコードはサードパーティ製品によってロードされるDLLです
- 「通常の」ブレークポイントは問題なく機能します。ステップスルーは正常に機能します。
__asm int 3
うまくいきます。 - の他の値
_crtBreakAlloc
もブレークポイントを引き起こしません(とにかく試したものではありません) - #133はリークレポートの最小数です
c++ - new をマクロ競合に置き換え、placement new に置き換えます
大規模なアプリケーション (数百万の LOC と数万のファイル) があり、メモリ リークを検出するために debug crt を使用しようとしています。私は次のように new をマクロ化しようとしています:
現在、私のアプリは非常に大きいので、理想的には、それをヘッダー ファイルに入れ、具体的には何万もの CPP ファイルに含めます。楽しい仕事ではありません。そのため、これを SDK の共通ヘッダー ファイルに配置しようとしました。これは、すべての翻訳単位に含まれます。
私が直面している問題は、一部の STL ヘッダー ファイルと衝突しているように見え、配置 new を使用するとコンパイラがエラーを出力することです。プラグマを使用して新しいマクロを無効にすることで、自分のコードでそれを変更できます。そこは問題ありません。プレースメント new を使用するのは STL ヘッダー ファイルです。変更できません。
cpp ファイルのインクルード ディレクティブを再配置することで、回避策を見つけました。例えば:
しかし、これは困難な回避策です。繰り返しますが、何千ものファイルを変更し、それらの STL ヘッダーが何よりも先に含まれていることを確認する必要があるためです。皮肉なことに、私はこの問題を具体的にテストするために hello world アプリケーションを作成しました。そして、私の hello-world アプリケーションは正常にコンパイルされました。しかし、この回避策がなければ、私の大規模なアプリはそうではありません。
だから私の質問は:
- 大量のコードを動かさずに新しいものを完全にマクロ化できた人はいますか? (比較的痛みのない方法で)
- STL ヘッダー インクルード ディレクティブの再配置を回避する他の方法はありますか?
ありがとう
c++ - crtdbg.hが競合を引き起こしているときに、C++で新しい演算子をオーバーライドします
自分のメモリマネージャーのメモリ追跡と準備を試している間、新しい演算子をオーバーライドしようとしました。フリップコードに関する記事は、このプロセスの私の主要なガイドラインでした(http://www.flipcode.com/archives/How_To_Find_Memory_Leaks.shtml)。
その記事で説明されている手法を実装した後、STLのどこかに「crtdbg.h」が直接または間接的にインクルードされているヘッダーファイルの一部を介してインクルードされているという問題が残ります(Visual Studio 2010を使用) 。
これにより、エラーが発生します。
ヘッダーファイルをインクルードせずに「_CrtDumpMemoryLeaks()」を配置してクイックチェックを実行すると、ヘッダーファイルが実際にSTLファイルにインクルードされているという疑いが確認されます。
独自の新規/削除を実装するのが良いかどうかは別として、いくつかの標準ライブラリ機能を使用し、これらの再定義エラーが発生しないようにしながら、独自の新規/削除実装を作成するにはどうすればよいか疑問に思います。
コードは次のようになります。
memdebug.h
memdebug.c
main.cpp
私がそれを解決した方法は、下を移動する#define new DEBUG_NEW
こと<iostream>
です; crtdbg.h
;の新しいものを書き換えないため、問題は解決されました。ただし、これにより、ファイルを含む可能性のあるヘッダーの後にこれが常に実行されていることを確認する必要があり、非常に面倒になりcrtdbg.h
ます。
これは、新しい演算子にカスタム名を使用し、代わりにその名前を使用することによってのみ解決できると思います。私は正しいですか?
mysql - MySQL C API コンパイル エラー、crtdbg.h が見つかりません
mysql api を使用する基本的な C プログラムを作成しています。私は Windows を使用しており、コンパイラとして mingw を使用し、IDE として eclipse cdt を使用しています。インクルード パスを mysql インクルード ファイルに追加し、lib パスを mysqlclient.lib ファイルに追加しました。ただし、次のエラーが表示されます。
D:\Programs\MinGW\include\mysql/my_dbug.h:108:20: fatal error: crtdbg.h: No such file or directory
これが私のコードです:
だれもその問題を解決できない場合、誰か mysqlclient.lib と libmysql.lib/libmysql.dll の使用の違いを教えてもらえますか?
乾杯。
c++ - 新しい式`new(std :: nothrow)`にMSリークディテクタを使用できないようです。あれは正しいですか?
新しい式でリークが発生しているファイルと行を取得しようとしていますnew (std::nothrow)
。
以下のコードでコメント化された新しい式はコンパイルされません。
<iostream>
また、どこにが含まれているのか知りたいです<crtdbg.h>
。見つかりませんでした。しかしもちろん、それはどこかにあるに違いありません。
visual-c++ - _CrtDumpMemoryLeaksを使用したメモリリークの検出
メモリリークを検出するためにCRTライブラリを使用するのはこれが初めてであり、Visual C ++ 2003を使用しています。このWebサイトで言及されているように、プログラムにステートメントを含めました。
その後に、stdio.h、windows.h、構造体/関数宣言などの他のすべてのヘッダーファイルを含む別のヘッダーファイルが続きます。私も持っています
関数が戻る直前。
プログラムをビルドしようとすると、エラーが発生します
malloc.hの関数プロトタイプの場合、例:
等
メモリチェックデバッガを正しく実行するにはどうすればよいですか?
ありがとうございました。
よろしく、レイン
c++ - crtdbg.h は DirectX と競合しますか?
crtdbg.h
メモリリークの検出を非常に簡単にする隠された宝石を発見しました。残念ながら、今日 DirectX を自分のプログラムにリンクしたところ、今まで見たことのないエラーが発生しました。
crtdbg が新しい演算子をオーバーライドすると、DirectX SDK で何かが壊れているようです (エラーに気付かなかった場合、私は DirectX 11 SDK を使用しています)。このようなものは文書化されていますか?いくつかの検索では結果が得られませんでした。これらのメモリ デバッグ ツールを引き続き使用できることを心から願っています。回避策があれば大歓迎です。