Theme / v0.10.8

Codebase Memory

程式碼記憶與知識圖譜 MCP

指令詳解

search_code 工具詳解

如何使用 search_code 進行文字與語意混合程式碼搜尋,精確定位字串常數與特殊邏輯

指令用途

雖然 search_graph 可以精確定位 Class 與 Method 節點,但在某些除錯場景中,我們需要尋找的是更細節的程式碼文字內容。例如:

  • 尋找特定的硬編碼字串(如 "CommandTimeout")。
  • 尋找某個特定的註釋或異常拋出訊息(如 "PLC connection lost")。

這些細節在圖譜中並不作為獨立的節點存在。search_code 結合了高效的文字搜索引擎(如內建的 ripgrep 或文字檢索器),能對整個專案進行快速的全文正則檢索,並將結果與圖譜中的檔案節點進行綁定,實現「文字 + 語意」的雙重定位。


運作流程

  1. 參數輸入:接收 query (正則或文字查詢)、path(限縮目錄)。
  2. 全文檢索:在背景執行高速代碼文字比對,自動避開排除清單。
  3. 語意關聯:將匹配到的程式碼行,與圖譜中該行所屬的 Method 或 Class 進行語意對應。
  4. 輸出結果:回傳匹配的代碼片段、行號及所屬的 Qualified Name。

實戰對話範例

範例:搜尋拋出 ArgumentException 的具體位置

  • You:
    /opsx:explore "請幫我搜尋專案中所有拋出 ArgumentException 異常的程式碼行。"
  • AI:

    好的,為了精確定位拋出此異常的位置,我將呼叫 search_code 工具進行正則檢索。

    CM 呼叫: search_code(query: "throw new ArgumentException")
    CM 回傳:

    [
      {
        "filePath": "/src/Core/Communication/PlcConnection.cs",
        "lineNumber": 82,
        "lineContent": "throw new ArgumentException(\"BaudRate is invalid\", nameof(baudRate));",
        "belongsTo": "ControlSystem.Core.Communication.PlcConnection.UpdateBaudRate"
      }
    ]

    分析
    檢索到一處匹配:

    • 位於 /src/Core/Communication/PlcConnection.cs 的第 82 行。
    • 該行程式碼屬於 UpdateBaudRate 方法內部。

    這能讓您在排查執行期報錯時,直接鎖定實體方法。接下來需要為您讀取該方法的完整原始碼嗎?