GIMPでコードをトレースしたいので、デバッグシンボルを有効にしたGIMPが必要です。コンパイル中にそれらを有効にしたかどうかは覚えていません。プログラムを再コンパイルせずにそれを確認する方法は?
Linuxではfile
およびobjdump
を使用できます。特に、ファイルが「削除された」か「削除されていない」か、およびobjdump --syms
は有用なものをすべて出力します(私にとっては、通常のビルドでは「シンボルなし」と表示されます)。
objdump --syms
コマンド、出力に「no symbols」よりもはるかに多く表示されます(少なくとも、カーネルオブジェクト)。
カーネルオブジェクト内にデバッグ情報があるかどうかを確認するには、objdump
コマンドの最後に次を追加できます。| grep debug
。
この文字列が見つかった場合、カーネルオブジェクトにデバッグ情報が含まれていることがわかります。そうでない場合は、「クリーンな」カーネルオブジェクトです。
コンパイルしたカーネルモジュールの例withoutデバッグ情報:
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
私がコンパイルした同じカーネルモジュールの例withデバッグ情報:
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
コマンドはboth debugおよびnon-debugの場合に「ストリップされない」ことを返しました。ただし、カーネルオブジェクトのサイズの違いは顕著でした。
明らかに、後者のバージョンにはデバッグ情報が含まれていました。
私の質問:file
コマンドはそのような場合に信頼性がありますか?私が経験したことから、私はobjdump --syms ... | grep debug
コマンド。