問題タブ [gdb-python]
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 - gdb python の container_of マクロ
カーネル リンク リストにアクセスしようとしていますが、構造は次のとおりです。
};
gdb を使用すると、次の方法でこれを印刷できます。
(gdb)p *(qlcnic_wait_event_t *)(((struct my_struct *)dev_base->next->priv).wait_list)
出力は次のとおりです。
}
リストを反復するには、「次へ」に移動し、wait_list
「container_of」を使用してアドレスのベースを取得する必要があります。だから私はcontainer_ofマクロを使用しています、コードは
した後(gdb) source container_of.py
出力は次のとおりです。
なぜ機能しないのですか?この container_of を実装する方法は?
gdb - gdb python:構造体の配列を歩く
構造体の配列をトラバースできませんか? 構造体の内容をチェックし、それに応じて各フィールドを出力することで、各インデックスを意味しますか? 次のような構造体に対してできること
配列の各インデックスで要素のアクセス制御を取得する方法は?
python - gdb python:gdb.valueで算術演算を行う方法は?
算術演算中に間違った答えが得られる理由:
一方、出力は0x410027a00728
. アドレスの種類とオフセットを確認しました
これもやってみた
これを行う代替手段はありますか?
python - gdb-python: 以下のコードが gdb で動作しないのはなぜですか?
以下のコードは Python コード (gdb モジュールなし) として正常に動作していますが、gdb 内では動作していませんか?
エラーは次のとおりです。
file.txt は次のとおりです。
with
andas
キーワードに問題があるようです。
gdb-python - Gdb Pretty Printer: *(char*){hex_address} Python で同等
次の形式の C++ クラスがあります (重要な部分だけをコピーします)。
この my_string クラスには、きれいなプリンターを追加しています。Pythonスクリプトに次の定義を追加しました(.gdbinitファイルに含めています)-ここにコピーされたfunc定義のみ:
しかし、使用時に以下のエラーが発生します -
「ptr」の値を int に変更してから、char にキャストし直す前に (上記の def のように) 計算を行うと、以下のエラーが発生します。
私が間違っていることは誰にもわかりますか?ここは本当に心打たれます。:(。一言で言えば、次のc/c++ expr同等物を達成しようとしています。
パイソンで。どうすればいいですか?
python - Pythonコードで特定のGDBブレークポイントを識別する方法は?
PythonでGDBのスクリプトを作成しようとしています。PythonスクリプトファイルをソースとするGDBのネイティブスクリプトファイルがあります。.gdb ファイルでは、さまざまな関数でいくつかのブレークポイントを宣言しています。Python スクリプトを使用して、これらのブレークポイントで次/ステップ/続行を実行し、さまざまな変数を出力できます。しかし、私は特定のプリントを持つブレークポイントごとに独自の python 関数を持っています。それをより良く、より一般的にしたいと思います。
私が欲しいのは、ブレークポイントに応じて異なる変数を出力できるように、Python コードに 1 つの関数と、ヒットしたブレークポイントを識別する方法を用意することです。とにかくそれらを印刷すると、範囲外のエラーが発生します。
私がチェックしたところ、GDB では、ここで述べたように Python コードでブレークポイントを定義することにより、Python でブレークポイントをいじることもできます。
このタスクを実行する別の方法はありますか (ブレークポイント定義を Python コードから除外する)、または gdb Breakpoint クラスを使用するのが唯一の方法ですか? 私が欲しいのは、それがどのブレークポイントであるかを特定するのに役立つチェックだけです。
ありがとう
gdb-python - Python でコードを 1 行ずつステップ実行し、スタックを調べる方法
プログラムを一度に1行ずつステップスルーし、各ステップでスタックポインターを記録するPythonスクリプトをgdbにセットアップしようとしています。gdb-python スクリプトに関する優れたオンライン リファレンスをあちこち探しましたが、価値のあるものを見つけることができませんでした。
スクリプトの例または gdb-python スクリプトの優れたオンライン リファレンスへのリンクをいただければ幸いです。
python - gdb python api:クラス/構造体メソッドを呼び出すことは可能ですか?
Python には、C++ 構造体に対応するvar
型の変数があります。gdb.Value
構造体にはメソッドがありvoid foo()
ます。
この式を評価できますvar['foo']
。しかし、var['foo']\()
言って不平を言うでしょう
私の場合、値の型はgdb.TYPE_CODE_METHOD
(確かではありませんが、var['foo'].type.code
戻ります16
)になると思います。
だから私は質問は次のとおりだと思います:
Python API はクラス メソッドの呼び出しをサポートしていますか?サポートしていない場合、回避策はありますか?
ありがとう!
gdb - 限定命令トレース用の GDB Python スクリプト
私は GDB スクリプトを作成して、限定された方法で命令トレースを実行しようとしています (つまり、addr を開始して addr を停止します)。おそらく私はグーグルで失敗していますが、これがすでに存在しているとは思えません。
ここに私の刺し傷があります:
私の考えでは、これはブレークポイントを設定し、コマンドがヒットしたときに実行するように設定する必要があります。ブレークポイントに到達すると、終了アドレスに到達するまでコードをシングル ステップで実行し、ログをオフにします。
これを gdb で実行すると、アプリケーションは正しい時点で中断しますが、コマンドは実行されません。
私は何を間違っていますか?これが間違った方法である場合は申し訳ありませんが、私に知らせてください。私はgdbスクリプトを初めて使用します