問題タブ [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.

0 投票する
4 に答える
24759 参照

unit-testing - gdbを(Pythonで)スクリプト化する方法は?例:ブレークポイントを追加して実行し、どのブレークポイントに到達しましたか?

OpenOCDによって制御される組み込みmcu用にgdbを使用して小さな単体テストを作成しようとしています(これにより、gdbサーバーを介してターゲットを制御できます)。

そこで、gdbのスクリプトを使用してこれを自動化したいと思います。

多かれ少なかれこれを行うgdb用のある種のスクリプトを書きたいと思います。

  1. ブレークポイントをいくつか追加します
  2. プログラムを開始します
  3. 停止したとき、どこで停止しましたか(フレーム情報を取得)
  4. 終了する。

何か案は?

Pythonのgdbスクリプトでこれを行う方法の例がいいでしょう。

ありがとうヨハン


この基本構造があり、関数start_test()が返すものに応じて、多かれ少なかれtest_failed()またはtest_success()に入るとしましょう。

gdbでこれを手動で行うことは、非常に簡単です。

したがって、私が試した次のステップは、これらのgdbコマンドをgdb起動スクリプトに追加することでした。これは多かれ少なかれこのように見えます。

で始めます

そして、この種の作品ですが、それはあまり良くありません。gdbがサポートしているように見える「新しくてかっこいい」Pythonスクリプトでこれを行うにはどうすればよいですか。

0 投票する
5 に答える
45401 参照

c++ - EclipseCDTでC++STLオブジェクトのgdbプリティ印刷を有効にするにはどうすればよいですか?

EclipsecdtでSTLオブジェクトのきれいな印刷を追加しようとしています。ここで説明する手順を実行しようとしました。

http://sourceware.org/gdb/wiki/STLSupport

Pythonフォルダーをチェックアウトしましたが、これを実行できないようです...

gdbinitを作成し、デバッグ構成を選択しましたが、デバッグを開始しようとすると、次のエラーが発生します。

Pythonシェルでgdbinitのコンテンツを実行しようとすると、次のエラーが発生します。

私はそのようなモジュールを持っていないようです...私はPythonについての手がかりを持っていないので、Pythonの「モジュール」が何であるかさえ知りません...。

誰かがこれを手伝ってくれますか?私にとって、実際のデバッグ情報を見ることができること、またはそれをそのように表現することは非常に重要です。または、どういうわけか、コンソールからでもデバッグして、gdbから素晴らしい出力を取得できます。たとえば、文字列を出力すると、役に立たない出力が得られます。

よろしく、アレックス

0 投票する
2 に答える
784 参照

debugging - CUDA/PyCUDA: cuda-gdb で消える起動失敗の診断

cuda-gdb で実行すると消えるカーネル起動エラーの調査方法を知っている人はいますか? メモリの割り当ては仕様の範囲内であり、起動は毎回同じカーネルの同じ実行で失敗し、(これまでのところ) デバッガー内で失敗したことはありません。

ああ、偉大な SO 教祖よ、今は何ですか?

0 投票する
1 に答える
295 参照

gdb - ソースインストルメンテーションコードの追加-ソースツーソースコンパイラは正しいアプローチですか?構築する方法は?

私は、メモリアクセスパターンをモデル化するために、特定のアプリケーションコードの特定の変数セットへの変更を追跡する必要があるプロジェクトに取り組んでいます。

主に2つのアプローチが考えられますが、それらについて考えてみてください。

  1. 私の最初の考えは、gprofのような多くのプロファイラーと同じように行うことです。ここでは、コンパイル前にターゲットアプリケーションコードにインストルメンテーションコードを追加し、このインストルメンテーションコードによって生成されたログを分析して必要な情報を取得します。

達成するために、私はある種のソースツーソースコンパイラを考えることができます。そこでは、与えられたコードを解析し、インストルメンテーションコード(同じ言語のソースソースコンパイラ)をアプリケーションに挿入します。後でコンパイルして実行し、必要なログを取得できます。

これは正しいように見えますか、それとも私は過剰設計ですか?そうでない場合、ソース-ソースコンパイラを(比較的)簡単に構築できるツールはありますか?

  1. GDBのPythonのサポートについて読んだので、変数のセットを構成ファイルとして取得し、監視対象の変数への書き込みがあるたびに監視ポイントとログを記録するPythonスクリプトを記述できるかどうかを考えています。このGDB機能を使おうとしましたが、Ubuntuマシンでは今のところ機能していないようです。 http://sourceware.org/gdb/onlinedocs/gdb/Python.html#Python

そして、アプリケーションの言語はnesCになります(nesCはコンパイルの過程でCに変換されると思います)(そしてアプリケーションは私のコンピューターのネイティブアプリのようにTOSSIMで実行されます)。

0 投票する
1 に答える
877 参照

python - gdb python : この投稿で書かれたこのスクリプトの使い方を誰か説明してもらえますか?

ACコードの場合はどうすればいいですか..?出来ますか..?この投稿を読みました。私も同様のことをしたいのですが、リンクで指定された更新されたスクリプトを使用できません GDB-Python scripting: any samples iterating through C/C++ struct fields

次の手順に従ってテストしました。ソースコード名はtest.cおよびpretty.pyでした

gcc -g test.c

gdb test

(gdb) source pretty.py

(gdb) run

(gdb) print <stcruct object>

このスクリプトの使用方法

0 投票する
2 に答える
3321 参照

python - gdb python:gdbコマンドの出力を変数にリダイレクトする方法は?

RHEL 5.3 OS、gdb7.5 およびpython2.7 を使用しています。いくつかの gdb デバッグ手順を自動化するスクリプトを Python で作成しています。次のコマンド ("name1") の出力を変数に格納できますか?

私のPythonスクリプトでは、これ(name1)をユーザー入力文字列と比較し、一致する場合は何らかのアクションを実行し、そうでない場合はユーザーに別の文字列を入力するように求めるため、これを行います。

それが不可能な場合は、代替案を提案してください。

0 投票する
1 に答える
5224 参照

python - gdb-python : 構造体の各フィールドを解析し、存在する場合は適切な値で出力します

gdb からのコア ダンプのデバッグを自動化する Python スクリプトを作成しています。カーネル データ構造とリスト (struct list_head など) を含むデータ構造を印刷しようとしています。たとえば、構造は次のようなものです。

私は次のAPI tp print this structureを使用しています:

gdb.execute('p (*(struct my_struct *)dev_base->priv)')

そのため、「struct my_struct」、struct my_hardware_context ahw の内容を出力できますが、ポインターとリストの内容 (たとえば、struct net_device *netdev、struct pci_dev *pdev、struct list_head mac_list) は自動的に出力できません (アドレスのみが出力されます)。では、gdb-python スクリプトを使用して *netdev、*pdev、および mac_list の内容を出力するにはどうすればよいでしょうか?

編集済み:私の質問をより明確にするために

gdb からのコア ダンプのデバッグを自動化する Python スクリプトを作成しています。カーネル データ構造とリスト (struct list_head など) を含むデータ構造を印刷しようとしています。たとえば、構造は次のようなものです。

次の API を使用してこの構造を出力しています: (正しいコア ダンプがあり、適切なシンボルが追加されていると想定できます。

main_struct = gdb.execute('p (*(struct my_struct *)dev_base->priv)')

print main_struct

これで、struct my_struct のすべてのメンバーの値が 1 つのレベルまで出力されます。つまり、struct my_hardware_context ahw の内容全体がインスタンスであるため出力されますが、struct net_device *netdev、struct pci_dev *pdev の内容は出力されません。 、struct list_head mac_list などなので、手動で以下のようにする必要があります。

netdev = gdb.parse_and_eval('*(*(struct my_struct *)dev_base->next->priv).netdev')

print netdev

pdev = gdb.parse_and_eval('*(*(struct my_struct *)dev_base->next->priv).pdev')

print pdev

だから私はこれらのステップを自動化したい。構造体 my_struct を反復処理し、ポインター、配列、およびリストの値も自動的に出力できる gdb-python API または方法はありますか?

ありがとう。

0 投票する
1 に答える
309 参照

gdb - きれいに印刷するために、標準出力/標準エラー出力を文字列として使用できますか?

dump()type のオブジェクトで呼び出されたときXに stderr に役立つものを出力する関数があります。

いくつかのコマンドの出力を利用して値を説明する文字列を返す GDB プリティプリント スクリプトを作成しようとしています。

残念ながら、これは私に与えます:

警告: 現在の出力プロトコルはリダイレクトをサポートしていません

この問題を解決するにはどうすればよいですか? これは stderr 出力を取得するための正しいアプローチですか?

0 投票する
1 に答える
865 参照

python - gdb python : 構造内のカーネル リンク リストを反復処理する方法

gdb-python スクリプトを使用して、カーネル データ構造とリスト (struct list_head など) を含むデータ構造を印刷しようとしています。構造は次のとおりです。

したがって、この構造体 my_struct を繰り返し処理しているときに、この構造体の内部にリンクされたリストがあることを識別する方法は、gdb マニュアルにリンクされたリストの TYPE_CODE_ 定数はありません。私はこのリンクでスコットのコードを使用していますgdb-python : 構造の各フィールドを解析し、存在する場合は適切な値でそれらを出力します

0 投票する
4 に答える
1462 参照

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 を実装する方法は?