
No.2ベストアンサー
- 回答日時:
所謂ダンプリストの作成方法が判らない、と言う事ですよね。
検索すればいくらでも引っ掛かると思いますが、とりあえずソースが有りそうなのを...
参考URL:http://www.m-net.ne.jp/~takagih/software/dump.html
No.3
- 回答日時:
「メモリダンプを行うプログラムの作成」自体が目的であれば、回答No1.と回答No.2の組み合わせでできますよね。
「デバッグのため、事後にメモリの内容を見たい」ということが目的であれば、自前でメモリを参照しダンプファイルを作成するのはあまり効率が良くありません。DbgHelpライブラリにあるMiniDumpWriteDump()でミニダンプファイルを作成すれば、Visual Studio .NETの統合環境で直接、ソースレベルで変数の内容を確認したり、実行当時のメモリ内容を確認したりできるのでお勧めです。
普段なら「詳細はヘルプを見れば分かります」と書くところなのですが、あまり馴染みのないAPIなのでプログラムを書いてテストしてみました。(インデントは全角空白なのでコピー&ペースト時は注意。)
DWORD WINAPI MinidumpThread(PVOID pv)
{
HANDLE hFile = CreateFile(
"c:\\tmp\\minidump.dmp",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hFile,
MINIDUMP_TYPE(MiniDumpWithFullMemory | MiniDumpWithHandleData),
NULL,
NULL,
NULL
);
CloseHandle(hFile);
return 0;
}
void CreateMinidump()
{
DWORD dw;
HANDLE hThread = CreateThread(NULL, 0, MinidumpThread, NULL, 0, &dw);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
CreateMinidump()を呼ぶとc:\tmp\minidump.dmpを作成します。なぜこういう構造にしてあるのか、エラーチェックはどうやるのか等は、ヘルプを見て自分で考えてください。
CreateMinidump()を呼んでc:\tmp\minidump.dmpが無事に作成されたとします。そうすると、これを使って事後ソースレベルデバッグができます。やり方はこうです。
1. Visual Studio .NETを起動する。
2. ファイル(F)→開く(O)→プロジェクト(P)...でc:\tmp\minidump.dmpを開く。
3. デバッグ(D)→開始(S)でデバッグ開始。この段階で、実行中のプログラムをブレークポイントで止めたのと同じ状態になります。
4. 初回のデバッグ開始時のみソリューションファイルの保存を迫られるので、どこか適当な場所に保存。
5. スレッドペインでCreateMinidump()のスレッドを選択する。シングルスレッドアプリであればCreateMinidump()のスレッド(メインスレッド)とMinidumpThread()のスレッドの2つしかないので探しやすいはず。マルチスレッドの場合は・・・通常のライブデバッグ時と手順は同じですので、根性と常識で探しましょう。
6. 呼び出し履歴ペインでCreateMinidump()を選択する。WaitForSingleObject()で止まっているはず。
7. あとはローカル変数ペインでCreateMinidump()の中のhThreadの値を見るでも、メモリペインで適当なメモリアドレスのメモリの内容を見るでも、はたまたWinMain()まで呼び出し履歴を遡ってlpCmdLineを観察するでも、ご自由にどうぞ。デバッグ(D)→続行(C)以外は何でもできます。(えー、まぁ、「コード変更を適用」とかはできないですな。その辺は常識とヘルプで判断してください。)
8. 最後にデバッグ(D)→デバッグの停止(E)でデバッグを終了。
No.1
- 回答日時:
windowsですよね?
自プロセスのメモリ空間でしたら、直接ポインタにアドレスを書き込んで、アクセスしても大丈夫だとおもいます。(もちろん、論理的に確保されていないorアクセスが許可されていないメモリブロックにアクセスするとアクセスバイオレーションエラーが発生します。)
もっと行儀よく、自プロセスのメモリをみたい、とか、他プロセスのメモリを見たいと思うなら、
・VirtualAllocEx (WinNT以降)
・ReadProcessMemory
といったAPIを調べられるとよいです。
この回答への補足
すいません。説明が悪かったようで。
中を見るのではなく、メモリの内容をファイルに出力して、後からそのファイルを見たいんです。
出力形式はメモリウィンドウ見たいな感じでです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Outlook(アウトルック) outlook メモリ不足 1 2022/05/31 10:16
- ノートパソコン FMVWD1A23Bのノートパソコンで、メモリ増設をしたいけどどうやってやるのでしょうか自分で出きる 2 2023/05/10 22:33
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- ノートパソコン 自作にするか、メーカーか、オススメのノートPCをおしえてください。 5 2022/11/29 17:42
- その他(パソコン・周辺機器) 回復ドライブは何回も作れますか? 4 2022/11/01 21:13
- CPU・メモリ・マザーボード メモリの不具合と出力の関係性について教えて!! メモリが壊れることで、グラボからの出力に悪影響は出る 5 2022/05/31 08:00
- ドライブ・ストレージ 最近、外付けSSDというのが出回ってますが、USBメモリと比較してどっちが安い?どっちが高性能? 6 2022/04/23 10:51
- CPU・メモリ・マザーボード このコンピューターはBIOSを使用しています 6 2022/07/06 14:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語初心者です。debug assert...
-
FLASH Lite1.1 背景の表示エラ...
-
グローバルメモリについて
-
C言語で、メモリを解放しないで...
-
C言語における再帰呼び出しの...
-
メモリがどんどんなくなっちゃ...
-
PC-98で拡張メモリを使え...
-
動的確保できるメモリ容量
-
初心者過ぎる質問ですが、VRAM...
-
Visul Basicについて
-
VBAで2進数を返すプログラムの...
-
配列がお手上げです。
-
C,C++プログラムの強制終了時の...
-
移動可能メモリ
-
C言語:関数のメモリ上でのサイ...
-
配列データ容量とメモリについて
-
エクセルVBA 大容量CSVファイル...
-
クイックソート
-
「ヒープサイズの設定」て何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAの配列サイズとメモリに関して
-
C言語で、メモリを解放しないで...
-
メモリ不足
-
メモリが不足しています(VBA)
-
「ヒープサイズの設定」て何?
-
メモリのセグメント違反の解決...
-
バッチファイルでの実行EXEのメ...
-
VB.netでUSBメモリの固有I...
-
EXCEL-VBAにてADOのレコードセ...
-
エクセルのメモリ使用状況/Appl...
-
「memcpy」と「strcpy」について
-
エクセルVBA 大容量CSVファイル...
-
ファイルマッピング関数で失敗
-
大容量のメモリ確保をスワップ...
-
GetAdapterInfoによりマックア...
-
C言語における再帰呼び出しの...
-
C++のCopyFileでメモリが増える
-
メモリを解放しないとどうなる?
-
クリスタルレポートでメモリ不...
-
closeとメモリの開放について
おすすめ情報