100

GIMP でいくつかのコードをトレースしたいので、デバッグ シンボルを有効にした GIMP が必要です。コンパイル中にそれらを有効にしたかどうか覚えていません。プログラムを再コンパイルせずにそれを確認する方法は?

4

2 に答える 2

97

Linux ではfileとを使用できます。objdump特に、ファイルが「削除済み」または「削除されていない」と表示されているかどうかを確認できます( my の下ではUbuntu 20.04.1 LTS、実行可能ファイルがコマンドでコンパイルされているかどうかが-g表示not strippedされfileます。しかし、 , が付いているものはそれに加えて-g表示されます)、および有用なものを出力するかどうか(私にとっては、通常のビルドでは「シンボルなし」と表示されます)。with debug_info,objdump --syms

于 2010-07-19T19:02:16.937 に答える
67

objdump --symsコマンドを実行すると、出力に「シンボルなし」以外のものが表示されます (少なくとも、カーネル オブジェクトの場合)。

カーネル オブジェクト内にデバッグ情報があるかどうかを確認するには、objdumpコマンドの最後に次を追加します| grep debug

この文字列が見つかった場合、カーネル オブジェクトにデバッグ情報が含まれていることがわかります。そうでない場合、それは「クリーンな」カーネル オブジェクトです。

デバッグ情報なしでコンパイルしたカーネル モジュールの例:

geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug

デバッグ情報を使用してコンパイルた同じカーネル モジュールの例:

geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
00000000 l    d  .debug_frame   00000000 .debug_frame
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
00000000 l    d  .debug_loc     00000000 .debug_loc
00000000 l    d  .debug_aranges 00000000 .debug_aranges
00000000 l    d  .debug_ranges  00000000 .debug_ranges
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .debug_str     00000000 .debug_str
00000010 l       .debug_frame   00000000 $d

ご覧のとおり、最初の出力では何も返されませんが、2 番目の出力では行が返さdebugれます。

注:私の場合、fileコマンドはデバッグと非デバッグの両方のケースで「削除されていません」と返しました。ただし、カーネル オブジェクトのサイズの違いは顕著でした。

  • 約。デバッグ情報なしで 16k
  • 約。デバッグ情報を含む 137k

明らかに、後者のバージョンにはデバッグ情報が含まれていました。

私の質問:fileそのような場合、コマンドは信頼できますか? 私が経験したことから、私はコマンドに頼っていobjdump --syms ... | grep debugます。

于 2014-01-02T15:16:38.207 に答える