問題タブ [gdbinit]
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.
python - gdbinit からの python インポートが機能しない
python-opencv をインストールimport cv2
しました。python シェルから問題なく実行してバージョンを確認できます。
新しい gdb コマンドを提供するために gdb でこの python ファイルをソースしようとすると、常に次のようになります。
私のPCはUbuntuディストリビューションから唯一のpythonインスタンスを取得しています。なぜgdbから、pythonシェルからロードできるこのインストールされたばかりのパッケージに関してインポートの問題が発生するのですか。
編集
これは python 2 パッケージであり、gdb は python 3 をロードします...解決できないようです。
debugging - gdb でコマンド x にフックするにはどうすればよいですか?
echo などの他のコマンドにフックしようとしましたが、うまく機能します。しかし、x コマンドをフックすると、失敗します。これが私の .gdbinit ファイル内のコードです。
gdb がフック用の関数のエイリアスを受け入れないことは承知しています。しかし、x はすでに完全な関数ですよね? エイリアスは見つかりませんでした。1文字では短すぎてコマンドを実行できないため、私もそれについて疑問に思っています
c - GDB: エラーが発生するまでプログラムを再実行し、途中でプロンプトに応答します
問題
私がレビューしているcプログラムをgdbに自動的にデバッグさせようとしていますが、既知のバグが原因でクラッシュが発生する可能性はわずかですが (つまり、可能性は 1 つ) あります。私は別のエンジニアと、対処するのに十分深刻であると争っています。そのため、修正に時間を費やすことを正当化するために、実際にクラッシュを発生させる必要があります。テストを高速化するために、必要に応じてクラッシュするまで、アプリケーションを GDB で実行するスクリプトを作成する予定です。10,000
先行研究
StackOverflow の別の回答を介してセグメンテーション違反が発生するまで、GDB を介して単純なアプリケーションを実行する方法を見つけましたが、問題を少し拡張する必要があります。したがって、プログラムがクラッシュするまで繰り返し実行できることはわかっています。
問題
私がしなければならないことは、特定のコマンドを発行する方法を理解することです。私のプログラムが数秒間実行された後、ユーザーにstdin
の範囲の数字を ( 経由で)入力するように求め、[0,100]
を押しENTERます。最初の反復で , ,0
を入力し、2 回目の反復で , , などと入力したいと思います。アプリケーションにコマンドライン引数を追加すれば、これはずっと簡単になると思いますが、変更することはできません。今回は、それが提供するインタラクティブな操作モードに依存する必要があります。ENTER1
ENTER
質問
これらのキーストローク/パターンを GDB で自動的に生成するコマンドを作成するにはどうすればよいですか? なんらかのGDBINIT
スクリプトを作成できると思いますが、バックトレースの取得やメモリの分析などに GDB をインタラクティブに使用することがほとんどで、このようなタスクの自動化についてはあまり詳しくありません。
ありがとうございました。
debugging - これは、gdb ノンストップ モードの自動化に問題のある設計ですか?
このコードを .gdbinit ファイルに実装して、停止が必要な gdb コマンド (x、set など) が機能するようにしました。
変数の目的は$pince_debugging_mode
、プログラムがデバッグ目的でターゲットに割り込んでいるかどうかを gdb に通知することです。
この設計では、シグナルの同時実行性について懸念があります。たとえば、アドレスにブレークポイントを設定し、それがトリガーされるのを待っている間に、x コマンドでいくつかのアドレスをチェックしたいとします。x コマンドが実行された後、x コマンドでスレッドを停止したため、hook-stop が実行されます。そして、hook-post の実行中にブレークポイントに到達したが、hook-stop はそれを認識せず、$pince_debugging_mode
まだ 0 に等しいため、c &
コマンドを実行し、ターゲットは続行するとします。したがって、この同時実行性の問題により、ブレークポイントで停止しても意味がありません。
この問題はまだ発生していませんが、発生する可能性が非常に低いとはいえ、危険を冒したくありません。この問題を回避するにはどうすればよいですか?
注: hookpost-x の定義には問題があります。これは、x コマンドが例外をスローするたびにフックポストが実行されないため、例外をスローする x コマンドの後に続行することが不可能になるためです。
gdb - 環境に基づいてgdbinitに条件部分を持たせる方法
gdb マニュアルには、次の部分があります。
そうでなければ
このコマンドを使用すると、条件付きで実行されるコマンドをスクリプトに含めることができます。if コマンドは、評価する式である単一の引数を取ります...
次のような数値式を使用すると、gdbinit でテストを実行できます。
しかし、次のように、文字列に対してテストを実行したい場合:
次に、gdb を起動するとエラーが発生しました。
条件付きブロックを作成するために、式の構文に関するドキュメントや例を見つけようとしましたが、うまくいきませんでした。
私が達成したいのは、環境変数に基づいて一連のコマンドを追加することです。したがって、gdbinit にこの種のセクションが必要です。
それを達成する方法は?
編集: Python を使用してこの種の操作を実行するのが最も簡単な方法のようです: .gdbinit 内および gdb 自体内の環境変数にアクセスするには?
「純粋な」gdbコマンドでこれを達成する方法がない場合、この質問は重複として閉じる必要があると思います.