2012-04-17 6 views
3

私はバグがある可能性があると私が使用しているライブラリ(私の仕事にとって非常に重要です)を持っています。残念ながら、図書館の所有者はサンプルコードを試してみるほど敏感ではありません。私はそれを自分でデバッグしようとしています。(他人が作成した)プロジェクト全体にフラグ(-gなど)を追加するにはどうすればよいですか?

もっと正直言って、それは単なるライブラリではなく、ライブラリとカーネルモジュールのセットであり、クラッシュはカーネルレベルで発生します(かなり厄介です)。実際にはコードの所有者にも分かりにくいでしょう。

時には私は幸運なことに、カーネルのoopsを取得します。-gオプションを使用してコードをビルドすると、エラーが発生した行を見つけることができます。彼のコードはほとんど手がかりがありません)。

プロジェクトのGNUmakeファイルは、automakeでビルドされました(私は信じています)。私の質問はmake-gCFLAGSを追加するにはどうすればいいですか?

「外部」オプションを追加できるようにMakefileを書き込む方法に沿って何かを読んでいますが、これらのmakefileがその機能で生成されるかどうかはわかりません。とにかくそれらの外部オプションが与えられる方法!

make CFLAGS=-g 

はそれを行う必要がありますが、正直見当がつかない:

私はこのような何かを推測しています。


編集:私は、カーネルモジュールが内蔵されているときに含まれる可能-gフラグに実際に興味を持っています、ということに注意してください。私は試してみることができません(例えば上記の私のコマンドで)うまく動作するかどうかを確認するためには、カーネルのビルドだけで[CC] ...オプションを表示せずに!

編集:実際には試しましたが、gdb ./module.koはまだデバッグシンボルがないと主張しています。

+0

カーネル(モジュール)の内部でクラッシュすると、そのエラーがカーネルモジュールにある可能性が大きくなります(100%)。 (私はカーネルハッカーではない)カーネルのデバッグは異なっている。候補リスト:モジュールが読み込まれますか?それは(カーネルから、またはsyscalls/ioctlsを介して)引数からパラメータ検証を実行しますか?カーネルスペースとユーザースペースの間のメモリの壁を尊重しますか? – wildplasser

+0

@wildplasser、私はそれを知っています。私は自分のカーネルモジュールで1週間を過ごした後、もう1つは疑わしい(これはRTAIだ)。最後に、まったく同じ動作を示すRTAI関数のみを使用する非常に単純なカーネルモジュールを思いつきました。だから私のモジュールのせいで本当にそれをすることはできません。 – Shahbaz

+0

私は帽子がRTAIモジュールであることさえ知らないので、私はあなたを助けることができないのではないかと心配しています。ほとんどの人が他のモジュールをコピーすることから始まる可能性は大きいようです。ショートリストに追加:レースとロック(ヒント:単一のコアマシンでテストしますが、すべてのレースを回避することはできません)がんばろう。 – wildplasser

答えて

1

configureスクリプトはありますか?もしそうなら、それはautoconfによって作成されましたか? (おそらく。)次に実行することができます

./configure CFLAGS='-g -O0' 
make clean 
make 

デバッグをオンにして最適化をオフにして全体を再構築します。

そうしないと、メイクファイルの関連抜粋を提供しない限り、誰もあなたを本当に助けることができません。

+0

設定スクリプトがあります。 RTAIはカーネルに似た設定を使用しますが、一度実行するとconfigureスクリプトが実行されます。私はそれがRTAI自身のMakefileの中で呼び出される場所を見つけることができました。 – Shahbaz

関連する問題