質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

大規模なソースファイルを読むコツ

受付中

回答 2

投稿

  • 評価
  • クリップ 4
  • VIEW 356

strike1217

score 554

タグがわからなかったので、適当に付けちゃいました。すいません。

glibcやLinux kernelなどの大きなソース群を読むコツを教えてもらえないでしょうか??

昨日は、GRUBのソースコードを読んでいたのですが、「モジュールを動的にロードしそこからLinux kernelに入る」ということを知るのに6時間もかかりました。
もっと3分位で把握できるようになりたいのです。

大規模なソースを読んでいる時に発生する問題があります。
関数です。

・似たような名前の関数が存在する(どっちを読めば良いのか分からない)
・呼び出されている関数が多すぎる(目的の記述を探すのにどの関数に入っていけばよいのか分からない)
・関数の定義場所、呼び出し場所がヒットしない(特に、「どのように呼び出されているのか分からない」)
・次々に関数にパラメータを渡していくと結局、渡した変数の値がどのように変わっていくかが把握できない

結局この関数のしていることがわからない!!・・・・みたいな?

特に、2番めですね。
どの関数を読めば、目的地にたどり着けるか・・・がわかりません。
大して重要ではない関数に入っていってしまって、「あれ??なにここ??」となります。

glibcは意外と簡単です。
printfやscanfは最終的にシステムコールを呼び出すので、システムコールをラップするための関数群だとわかると非常に読みやすいです。

一方Linux Kernelはやばいです。
全然進まない・・・><

大規模なソースを読むときのコツかなにかあれば教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

こんにちは。

一方Linux Kernelはやばいです。
全然進まない・・・><

よく分かります。上げられた問題点、経験しました。
関数ポインタが多用されているので静的解析だとマジ辛いです。デバッガで実行できる環境を整えて、どの関数が呼ばれるのかブレークやステップ実行で確認しつつソースを読んだような気がします。

しかし、boostみたいに「超高度なテクニック」は使われていないし、コードは綺麗なので素直に読めます。
結局、根性で読むしか無いけど、根性で読める程度でもあると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/20 00:39

    ふむーー。なるほど!根性ですか!

    Linux kernelのどの辺りを読んでいたんですか??
    デバイス関連ですか??

    Linux kernelは大半がデバイス関係なので、あそこを読むのが一番大変なんじゃないかなぁ・・・

    キャンセル

  • 2017/12/20 01:00

    あの時はAndroid向けに入力デバイスのサンプルを作ってたから、シリアルドライバを改造するために読みました。
    ブート周りも読んだ記憶があります。リセットベクタから読めば間違いないとの思いからですね。確かデバドラの起動にたどり着くまで読んだような気もします。(途中すっとばしたかも。かなり前の話なので記憶がおぼろげです。)

    キャンセル

  • 2017/12/20 01:24

    なるほど!
    わかりました。

    キャンセル

0

IDE を使いましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/19 11:31

    vimとかでしょうか??

    キャンセル

  • 2017/12/19 12:03

    Visual Studio とかです。
    ご自分の環境で使えるものを探してください。

    現在閲覧中の関数がどこから呼ばれているか、どこで定義されているか、変数の中身がどうなっているかなど、デバッグに必要な機能が備わっているものがあるはずです。

    vim はテキストエディタとしての使い方しか知らないのでノーコメントです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Apache インデックスファイルを設定したい

    例えば、example.com/test/にアクセスしたらindex.htmに記述した 内容が表示されるようにしたいです。 つまり、インデックスページをindex.htmlからin

  • 受付中

    CPU使用率には余力があるのにLoad Averageが高くなる時の対処方法

    Postgresqlののサーバでpgbenchを実行しています。 その時、cpu使用率が50%程度で、cpu割り込みも発生せず、ioの値も5いくかどうかで推移しています。 メモリ使

  • 解決済

    【LINUX】lsofコマンドについて

    /use/sbin/lsof -i TCP -n -P を実行して出てくるDEVICE項目は何を表しているのか教えてください。 現在APサーバのメモリが上昇しており、それに

  • 解決済

    閏秒挿入でなぜ多くのシステムがダウンするのか

    今年の元旦、8時59分60秒が挿入されたことで、多くのエンジニアの年末年始が仕事に追われる日々だったのではないかと思われます。そこで閏秒を挿入することで同期がおかしくなるということ

  • 解決済

    gdiskの拡張方法について

    有識者の皆様 お手数ですが、よろしくお願いします。 RHEL7.2の仮想OSの/dev/sdb1(/data)の領域を拡張したいと考えています。 ■環境 仮想化環境(E

  • 解決済

    Linux CUIのみ環境での日本語入力

    CentOS7 minimal をVirtualBoxにインストールしました。GUI、デスクトップ環境 無しのサーバー版ということです。今、設定中なのですが、CUIのみの環境で日本

  • 解決済

    セキュリティ(exploit)の教材について

    セキュリティ、特にexploitの分野を深く学びたく思っています。 ・Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際 この本に書いていることはある程度身についていま

  • 解決済

    プロセッサ数について

    python プログラムを実行する際に、オプションでプロセッサ数を指定できます。 普段は自分の使用しているLinuxのプロセッサ数のMaxである8を指定しているですが、8を指定する

同じタグがついた質問を見る

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。