疑難排解

已知問題

  • Doxygen 並不是真正的編譯器,它只是一個詞法掃描器。這表示它無法也不會偵測原始碼中的錯誤。
  • Doxygen 有一個內建的預處理器,但其運作方式與 C 預處理器略有不同。Doxygen 假設標頭檔已適當防範多次包含,且每個 include 檔案都是獨立的(亦即,它可以放置在原始檔的頂部而不會造成編譯器錯誤)。只要情況屬實(而且這是一個良好的設計實務),您就不會遇到問題。
  • 由於無法測試所有可能的程式碼片段,因此很有可能某些有效的 C/C++ 程式碼片段無法正確處理。如果您發現這種情況,請將其傳送給我,以便我可以改進 Doxygen 的剖析能力。請盡可能縮小您傳送的程式碼片段,以協助我縮小搜尋範圍。
  • 如果您的程式碼中有數個具有相同名稱的類別、結構或聯集,Doxygen 將無法正常運作。但是,它不應該當機,而是應該忽略所有同名的類別,只保留一個。
  • 某些命令無法在其他命令的參數內運作。例如,在 HTML 連結(即 <A HREF="...">...</A>)內,其他命令(包括其他 HTML 命令)無法運作!分節命令是一個重要的例外。
  • 在某些情況下,多餘的大括號可能會讓 Doxygen 混淆。例如
      void f (int);
    
    會被正確地剖析為函式宣告,但
      const int (a);
    
    也會被視為名稱為 int 的函式宣告,因為只會分析語法,而不是語意。如果可以偵測到多餘的大括號,例如在
      int *(a[20]);
    
    的情況下,Doxygen 會移除大括號並正確剖析結果。
  • 並非所有包含在文件中的程式碼片段中的名稱都會被連結取代(例如,當使用 SOURCE_BROWSER = YES 時),而且指向多載成員的連結可能會指向錯誤的成員。對於每個函式產生的「參考來源」清單也是如此。

    部分原因是因為目前程式碼剖析器不夠聰明。我會在未來嘗試改進這一點。但即使進行了這些改進,也無法將所有內容正確連結到對應的文件,因為可能存在歧義或缺乏關於程式碼片段所在內容的資訊。

  • 如果類別 A 已經有一個名稱為 f 且參數列表相同的成員,則無法使用 \relates\relatesalso 命令將非成員函式 f 插入類別 A 中。
  • 目前對成員特化的支援非常有限。只有在有特化的樣板類別時才能運作。
  • 並非所有特殊命令都會正確轉換為 RTF。
  • dot 的 1.8.6 版(以及可能更早的版本)不會產生正確的對應檔,導致 Doxygen 產生的圖形無法正確點擊。
  • 僅限 PHP:Doxygen 要求所有 PHP 陳述式(即程式碼)都包裝在函式/方法中,否則您可能會遇到剖析問題。

如何提供協助

Doxygen 的開發高度仰賴您的意見!

如果您正在嘗試 Doxygen,請告訴我您對它的看法(您是否錯過某些功能?)。即使您決定不使用它,也請告訴我原因。

如何回報錯誤

錯誤會在 GitHub 的 問題追蹤器中追蹤。在提交新錯誤之前,請先搜尋資料庫,看看是否有人已提交相同的錯誤。如果您認為您發現了新的錯誤,請回報它

如果您不確定某個問題是否為錯誤,請先在 使用者郵件列表Stack Overflow 上使用 doxygen 標籤尋求協助(需要訂閱)。

如果您只傳送(模糊的)錯誤描述,通常對我沒有幫助,而且我需要花費更多時間才能弄清楚您的意思。在最壞的情況下,您的錯誤回報甚至可能被我完全忽略,因此請務必在您的錯誤回報中包含以下資訊

  • 您正在使用的 Doxygen 版本(例如 1.5.3,如果不確定,請使用 doxygen --version 或使用 doxygen --Version 來取得更多資訊)。
  • 您的作業系統的名稱和版本號碼(例如 Ubuntu Linux 18.04 LTS)
  • 同時傳送設定檔通常也是一個好主意,但請在使用 Doxygen 時使用 -s 旗標來縮小設定檔(使用 doxygen -s -u [configName] 從現有的設定檔中移除註解。甚至最好對使用的 [configName] 使用 -x-x_noenv 旗標,以取得使用的設定與 Doxygen 預設設定之間的差異,因此請使用 doxygen -x [configName])。
  • 對我來說,修復錯誤最簡單(而且通常是唯一)的方法是,如果您可以附加一個小範例來說明您在錯誤回報中遇到的問題,這樣我就可以在我的電腦上重現它。請確保範例是有效的原始碼(可能可以編譯),而且範例確實捕捉到了問題(我經常收到無法觸發實際錯誤的範例!)。如果您打算傳送多個檔案,請將這些檔案壓縮或封裝成單一檔案,以方便處理。請注意,在回報新錯誤時,您只有在提交初始錯誤描述之後才能有機會附加檔案。
  • 在提交之前,也請考慮使用一些偵錯旗標來執行 Doxygen,執行 doxygen -d 以取得所有旗標。 preprocessor 選項可能會提供您關於 Doxygen 如何理解輸入檔案的提示。

您可以(並且鼓勵)為已回報的錯誤新增修補程式。如果您這樣做,請在 提取要求表單中使用「issue #NUMBER TITLE」作為標題,其中「NUMBER」和「TITLE」是指 GitHub 上相關的問題。

如果您對如何修復現有錯誤和限制有想法,請在開發人員郵件列表上討論它們(需要訂閱)。如果您不想透過錯誤追蹤器或郵件列表傳送修補程式,也可以直接傳送至 doxyg.nosp@m.en@g.nosp@m.mail..nosp@m.com

對於修補程式,請使用「diff -uN」或包含您修改的檔案。如果您傳送多個檔案,請將所有檔案封裝或壓縮,這樣我只需儲存和下載一個檔案即可。

前往下一節或返回索引