0

Python noob をここで完成させます (C では錆びています)。

Lion OS を搭載した Mac を使用しています。libUSB を使用する USBpy を使用する NFCpy を使用しようとしています。ヌルポインタが原因でlibUSBがクラッシュしていますが、非常に多くの部分が関係しているため、それをデバッグする方法がわかりません。

現在、強調表示されたコードを表示するために xcode を使用していますが、すべてを bash から実行しています。別の環境でこれが何とか簡単になる場合は、Windows または Linux に切り替えることができます。

これをデバッグする方法についての提案は大歓迎です;-)

PS: Python スクリプトを実行する bash で、C に入力した出力を確認できれば問題ありません。

4

2 に答える 2

1

コア ダンプを有効にし (ulimit -Sc unlimited)、プログラムをクラッシュさせてコア ファイルを生成します。コア ファイルを gdb で調べて、クラッシュに至る条件について詳しく調べます。コール スタックの関数とローカル変数を調べて手がかりを探します。

または、gdb の下でプログラムを実行して、ライブ プロセスがクラッシュし、gdb がシグナル (SIGSEGV、SIGBUS など) をインターセプトした後、ライブ プロセスを調べます。

関連するすべてのネイティブ コード (Python、libUSB など) でデバッグ シンボルを使用できるようにすると、これらのアプローチはどちらも簡単になります。

Tio が提案したように、できる限り小さいプログラムで問題を分離することも、このプロセスを容易にします。

PS: Python スクリプトを実行する bash で、C に入力した出力を確認できれば問題ありません。

質問の他の場所で「Cで」プリントを追加することについては何も言及していません。libUSB を変更してデバッグ プリントを追加しましたか? もしそうなら、あなたはそれを再構築しましたか?以前に利用可能だった libUSB の代わりに新しいビルドが確実に使用されるようにするために、どのような手順を実行しましたか? ダイナミック リンカーがシステム バージョンよりも自分のバージョンを優先するようにするには、dylib 関連の環境変数を調整する必要がある場合があります。他に何かした場合は、何を説明してください。:)

于 2012-02-20T13:47:11.493 に答える
1

端末に C を入力したことが表示されるはずprintf()です。ここではすでに何かが間違っています。最新のコンパイル済みライブラリを使用していますか? 確かに、print の代わりに use を使用できますassert(0)(assert.h を含める必要があります)。

とにかく、gdb を使用してソフトウェアをデバッグできます。

gdb --args python yourfile.py

# type "run" to start the program
# if you put assert() in your code, gdb will stop at the assert, or you can put 
# manual breakpoint by using "b filename:lineno" before "run"
于 2012-02-20T13:48:28.123 に答える