gdbのマニュアルを誰か訳して

  • 投稿日:
  • by
  • カテゴリ:



お願いですから。最新版を。


仕方がないので自分用に超訳。


9.5 Specifying Source Directories


http://sourceware.org/gdb/current/onlinedocs/gdb/Source-Path.html#Source-Path



Executable programs sometimes do not record the directories of the source files from which they were compiled, just the names. Even when they do, the directories could be moved between the compilation and your debugging session. gdb has a list of directories to search for source files; this is called the source path. Each time gdb wants a source file, it tries all the directories in the list, in the order they are present in the list, until it finds a file with the desired name.


実行プログラムはソースファイルがどこのディレクトリでコンパイルされたかを記録しておらず、名前だけだったりします。ディレクトリが記録されていても、コンパイル時とデバッグセッション時でディレクトリが移動していることもあるわけです。gdbはソースファイルを検索するディレクトリのリストを持っています;これをソースパスと呼びます。gdbはソースファイルを必要とするときはいつも、リスト上のすべてのディレクトリを試します。探す順番はリスト順です。欲しい名前のファイルが見つかるまで探します。




For example, suppose an executable references the file /usr/src/foo-1.0/lib/foo.c, and our source path is /mnt/cross. The file is first looked up literally; if this fails, /mnt/cross/usr/src/foo-1.0/lib/foo.c is tried; if this fails, /mnt/cross/foo.c is opened; if this fails, an error message is printed. gdb does not look up the parts of the source file name, such as /mnt/cross/src/foo-1.0/lib/foo.c. Likewise, the subdirectories of the source path are not searched: if the source path is /mnt/cross, and the binary refers to foo.c, gdb would not find it under /mnt/cross/usr/src/foo-1.0/lib.


例えば、実行プログラムがファイル/usr/src/foo-1.0/lib/foo.cを参照すると仮定し、今ソースパスが/mnt/crossだとします。ファイルは文字通りに調べられます;これが失敗すると、/mnt/cross/usr/src/foo-1.0/lib/foo.cが試されます;これが失敗すると、/mnt/cross/foo.cがオープンされます;これが失敗すると、エラーメッセージが表示されます。gdbはソースファイル名を/mnt/cross/src/foo-1.0/lib/foo.c.というようにバラバラにして調べません。同じようにソースパスのサブディレクトリも検索されません:もしソースパスが/mnt/crossで、バイナリがfoo.cを参照しても、gdbは/mnt/cross/usr/src/foo-1.0/lib配下を検索しないのです。




Plain file names, relative file names with leading directories, file names containing dots, etc. are all treated as described above; for instance, if the source path is /mnt/cross, and the source file is recorded as ../lib/foo.c, gdb would first try ../lib/foo.c, then /mnt/cross/../lib/foo.c, and after that―/mnt/cross/foo.c.


素のファイル名、ディレクトリではじまる相対(パスの)ファイル名、ドットと含むファイル名などは、すべて上記のように取り扱われます;例えば、もしソースパスが/mnt/crossで、ソースファイルが../lib/foo.cと記録されていると、gdbははじめに../lib/foo.cを試し、それから/mnt/cross/../lib/foo.c、その後で、/mnt/cross/foo.cを試すわけです。




Note that the executable search path is not used to locate the source files.


実行プログラムの検索パスはソースファイルの配置には使われないことに注意してください。



・・・



In addition to the source path, gdb provides a set of commands that manage a list of source path substitution rules. A substitution rule specifies how to rewrite source directories stored in the program's debug information in case the sources were moved to a different directory between compilation and debugging. A rule is made of two strings, the first specifying what needs to be rewritten in the path, and the second specifying how it should be rewritten. In set substitute-path, we name these two parts from and to respectively. gdb does a simple string replacement of from with to at the start of the directory part of the source file name, and uses that result instead of the original file name to look up the sources.


ソースパスに加えて、gdbはソースパスの置換ルールのリストを管理するコマンドセットを提供しています。置換ルールは、プログラムのデバッグ情報に格納されたソースディレクトリをどのように書き換えるかを決めるもので、コンパイル時とデバッグ時でソースが異なるディレクトリに移動するような場合に用いられます。ひとつのルールはふたつの文字列でできており、ひとつめの文字列はパスの中の書き換える必要のあるものを指定し、ふたつめはどう書き換えるかを指定します。set substitute-pathで、このふたつの部分をそれぞれ指定します。gdbは単純な文字列置換をおこないます。ソースファイル名のディレクトリ部分の先頭で、"どこから"を"どこへ"に。そして元のファイル名の代わりに置換した結果を用いてソースを探します。




Using the previous example, suppose the foo-1.0 tree has been moved from /usr/src to /mnt/cross, then you can tell gdb to replace /usr/src in all source path names with /mnt/cross. The first lookup will then be /mnt/cross/foo-1.0/lib/foo.c in place of the original location of /usr/src/foo-1.0/lib/foo.c. To define a source path substitution rule, use the set substitute-path command (see set substitute-path).


先に挙げた例を用いると、foo-1.0ツリーが/usr/srcから/mnt/crossに移動したと仮定すると、gdbには、すべてのソースパス名について/usr/srcを/mnt/crossで置き換える指定をすることができます。はじめに調べられるのは、元の配置場所の/usr/src/foo-1.0/lib/foo.cに対応する/mnt/cross/foo-1.0/lib/foo.cです。ソースパスの置換ルールを定義するには、set substitute-pathコマンドを使います。(set substitute-pathをチェキラ!)



あーもう疲れたから、ここまで。