問題タブ [gcore]
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 - コアダンプからのメモリ リークを分析する方法
コア ファイルの分析からメモリ リークを分析したいと考えています。
メモリ リークを挿入し、gcore コマンドでコア ファイルを生成するサンプル コードを作成しました。
プロセス ID を見つける
生成されたコア
以下のようにコアファイルから一般的なパターンを見つけました(スタックオーバーフロー別のスレッドで提案されているように、生成されたコアファイルのみを見て、プロセスのどの部分がメモリの大部分を使用したかを特定する方法はありますか?)
以下の 2 つのアドレスは疑わしいものです
core ファイルには次の繰り返しパターンがあります
しかし、gdb info address や x などのコマンドからアクセスする方法がよくわかりません。シンボル情報をバイナリ形式から変換する方法を教えてください。
linux - Linux では、実行可能ファイルが削除されたプロセスを gcore できますか?
CentOS 6.6 でのプログラミングで、実行可能ファイル (whoops, make clean
) を画面セッションで実行中に削除しました。
さて、関係ありませんがgcore
、何かをデバッグするプロセスが必要です。実行可能ファイルを再構築しましたがgcore
、置き換えられたファイルを受け入れません。元のファイルが削除されたことを認識しており、コアをダンプさせません。
FreeBSDgcore
にはオプションの引数 " executable " があり、有望に見えます (使用するバイナリを指定できるかのように見えます/proc/15659/exe
) が、Linuxgcore
にはそのような引数がないため、これは役に立ちません。
回避策はありますか? それとも、(再作成された実行可能ファイルを使用して) プロセスを再起動し、追跡しているバグが再現されるのを待つ必要がありますか?
java - コア ダンプからヒープダンプを作成する SOLARIS jmap エラー
Solaris で gcore によって生成されたコア ファイルからヒープ ダンプを作成しようとすると、次のエラーが発生します。
コア ファイルへのアタッチ エラー: ターゲット プロセス/コアで libthread が見つかりませんでした!
コア ファイルが作成された JVM は、ヒープ ダンプの作成に使用されているものと同じ Java インスタンスです。このエラーが発生する理由は誰でも知っています。以前に RedHat インスタンスでこれを行ったことがありますが、Solaris では初めてです。これは、Solaris gcore の出力が jmap と互換性がないためでしょうか?
どんな助けでも大歓迎です。
android - Android: gdbserver にデバッグ シンボルが見つかりません
ルート化された Android にプロセスをアタッチし、GDB でコアファイルを作成しようとしましたが、シンボルが見つからなかったため、gcore ファイルを作成できません。
私の電話では、ターミナルアプリを開いて入力します
ターミナルでルートアクセスを許可します。私は入力します
実行中のすべてのプロセスを表示します。私は入力します
私のコンピューターで、gdb.exe (Android NDK から) を開き、入力します
そして私はそれらの情報を得ました
自分でコンパイルした gdb.exe を使用して、別の情報を取得しました
私はタイプする
そしてそれは言います
/system/bin のカーネル アーキテクチャに一致する正しい gdbserver バイナリをインストールしました
PIE保護機能がないAndroid 4.4.4以下のさまざまなAndroid OSを試しましたが、それでも同じ問題が発生します。移植版の gdb クライアントを使用しようとしましたが、完全に動作します。
Android 5.1.1 と 2 GB RAM を実行している強力なデバイスでコアファイルを保存したいだけで、512 MB RAM と Android 4.4.4 を実行しているローエンドのタブレットで gdb クライアントを使用する代わりに、gdb は完全に作成できませんでしたRAM が少ないため、corefile が削除されました。
python - コアダンプから文字列の仮想アドレスを逆にする方法は?
プロセスのメモリで特定の文字列を見つけようとしています。具体的には、それが格納されている仮想アドレスを見つけたいです。プロセスを呼び出しgcore
、結果のファイルをスキャンしてすべての一致を検索する Python スクリプトを作成しました。次に、そこにあるエントリを呼び出しpmap
て反復処理します。私の考えは、各インデックスが対応するメモリのセクションを見つけ、前のセクションのサイズの合計を減算して正しいセクションのオフセットを取得し、それをベースに追加して、仮想アドレスを取得することです。しかし、gdb を使用して計算している仮想アドレスで文字列を検索すると、正しい文字列が見つかりません。私の方法がうまくいかないのはなぜですか?gcore
仮想メモリの内容全体を順番にダンプしませんか?
find
関連するメモとして、gdb を使用してファイルを手動でスキャンしようとしましたが、そのコマンドを使用して問題のメモリ領域内の文字列をスキャンすると、ほとんど一致するものが見つからないようです(正確な数はさまざまです)。大いに)。何故ですか?