Warning

此文件的目的是爲讓中文讀者更容易閱讀和理解,而不是作爲一個分支。因此, 如果您對此文件有任何意見或改動,請先嘗試更新原始英文文件。如果要更改或 修正某處翻譯文件,請將意見或補丁發送給維護者(聯繫方式見下)。

Note

如果您發現本文檔與原始文件有任何不同或者有翻譯問題,請聯繫該文件的譯者, 或者發送電子郵件給胡皓文以獲取幫助:<src.res@email.cn>。

Original:Bisecting a bug
譯者:吳想成 Wu XiangCheng <bobwxc@email.cn> 胡皓文 Hu Haowen <src.res@email.cn>

二分(bisect)缺陷

(英文版)最後更新:2016年10月28日

引言

始終嘗試由來自kernel.org的原始碼構建的最新內核。如果您沒有信心這樣做,請將 錯誤報告給您的發行版供應商,而不是內核開發人員。

找到缺陷(bug)並不總是那麼容易,不過仍然得去找。如果你找不到它,不要放棄。 儘可能多的向相關維護人員報告您發現的信息。請參閱MAINTAINERS文件以了解您所 關注的子系統的維護人員。

在提交錯誤報告之前,請閱讀「Reporting issues」。

設備未出現(Devices not appearing)

這通常是由udev/systemd引起的。在將其歸咎於內核之前先檢查一下。

查找導致缺陷的補丁

使用 git 提供的工具可以很容易地找到缺陷,只要缺陷是可復現的。

操作步驟:

  • 從git原始碼構建內核

  • 以此開始二分 [1]:

    $ git bisect start
    
  • 標記損壞的變更集:

    $ git bisect bad [commit]
    
  • 標記正常工作的變更集:

    $ git bisect good [commit]
    
  • 重新構建內核並測試

  • 使用以下任一與git bisect進行交互:

    $ git bisect good
    

    或:

    $ git bisect bad
    

    這取決於您測試的變更集上是否有缺陷

  • 在一些交互之後,git bisect將給出可能導致缺陷的變更集。

  • 例如,如果您知道當前版本有問題,而4.8版本是正常的,則可以執行以下操作:

    $ git bisect start
    $ git bisect bad                 # Current version is bad
    $ git bisect good v4.8
    
[1]您可以(可選地)在開始git bisect的時候提供good或bad參數 git bisect start [BAD] [GOOD]

如需進一步參考,請閱讀: