[解決済み] プログラムのコアダンプファイルがコマンドラインパラメータを持つ場合、GDBでどのように解析しますか?
2022-04-17 10:35:12
質問
私のプログラムはこのように動作します。
exe -p param1 -i param2 -o param3
クラッシュしてコアダンプファイルが生成されました。
core.pid
.
でコアダンプファイルを解析したい。
gdb ./exe -p param1 -i param2 -o param3 core.pid
しかし、GDBはEXEファイルのパラメータをGDBの入力として認識します。
このような場合、コアダンプファイルをどのように解析すればよいのでしょうか?
どのように解決するのですか?
GDBでコアを使う方法はいろいろありますが、実行ファイルに渡すべきパラメータをGDBに渡すのは、コアファイルを使う方法とは異なります。これは、あなたがそのエラーを得た理由である可能性もあります。コアファイルの使い方は以下の通りです。
gdb <executable> <core-file>
または
gdb <executable> -c <core-file>
または
gdb <executable>
...
(gdb) core <core-file>
coreファイルを使用する場合は、引数を渡す必要はありません。GDBでクラッシュのシナリオが表示されます(UbuntuのGDBバージョン7.1で確認)。
例えば
$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0 __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)
GDBでデバッグする実行ファイルにパラメータを渡したい場合は
--args
.
例えば
$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2
Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)
他のGDBオプションを見るには、Manページが役に立つでしょう。
最も便利なコマンドは
-
bt
(バックトレース) -
info locals
(ローカル変数の値を表示します。) -
info registers
(CPUのレジスタの値を表示します。) -
frame X
(スタックフレームへの変更 X ) -
up
とdown
(スタックフレーム(コールチェーン)内を移動する)。
関連
-
deepin20の不正確な時刻表示を調整する方法は?Deepinの時刻補正方法
-
[解決済み] ビーコン待ちでハングアップしたリーバー
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] すべてのディレクトリとサブディレクトリを再帰的にgrepするにはどうしたらいいですか?
-
[解決済み] Linuxで特定のポートで動作しているプロセスを停止させる方法は?
-
[解決済み] bashスクリプトでset -eはどういう意味ですか?
-
[解決済み] Linuxのディレクトリ内のファイルを再帰的にカウントする
-
[解決済み] bashで "cat << EOF "はどのように動作するのですか?
-
[解決済み] Visual Studioでコマンドラインパラメータを使ったデバッグを行う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linuxにおけるxinetdサービスの管理方法に関するケーススタディ
-
Linuxでファイルパーミッションを与えるには?Linuxでファイルに実行可能なパーミッションを追加するためのヒント
-
Linuxのデスクトップの背景を画像で引き伸ばし表示にする方法とは?
-
deepin depth systemはどのような内容でアップデートされましたか?deepinの最新版アップデート内容まとめ
-
2020年deepin Deep OS V20のアップデートによる更新情報
-
[解決済み] libstdc++.so.5: 共有オブジェクトファイルを開くことができない - しかしライブラリはインストールされており最新である
-
[解決済み] エクスポートされた環境変数を削除する方法を教えてください。
-
[解決済み] POSIX」の意味を教えてください。
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
-
[解決済み】Linuxでセグメンテーションフォールト時にコアダンプを生成する方法は?