2009-02-17 40 views
7

很多時候,當我在觀看其他代碼時,我只想找到變量定義的位置和方式。通常我現在要做的是查找變量的類型,直到找到定義,這非常耗時。我想有一些工具可以幫助我處理這種情況。有些工具或命令中的任何建議可以幫助我完成這項任務?任何程序或技巧來找到一個變量的定義?

我知道使用GUI和創建一個項目,這是自動完成的我正在談論的一種方法來做到這一點沒有GUI。我只使用文本模式。我在Linux下運行,我正在使用C/C++,但歡迎其他語言的建議。

非常感謝。

一個可能的解決方案

米歇爾在他的評論一個提出了一個簡單有效的解決方案再次定義變量,在編譯時間這種情況下,編譯器會告知哪裏是以前definiton。當然,要應用此解決方案,我們需要先考慮變量的局部性。

+0

您至少可以指定語言;) – devio 2009-02-17 23:57:00

+0

我很喜歡C++,現在我的大腦只認爲只存在一種語言 – Eduardo 2009-02-17 23:58:17

+0

重新定義變量的方法不是解決方案。你有不同的命名空間。例如,如果您正在查找名爲「average」的變量,則可以在方法或函數內或其他名稱空間(具有相同名稱)中定義該變量,並且這不是錯誤。 – 2009-02-18 07:19:02

回答

8

編輯:好的,你說你正在使用C++。我在編輯我的回覆。我將使用C預處理器,然後使用grep作爲變量。它會出現在第一位。

cpp -I...(preprocessor options here) file.cpp | grep variable 

C預處理器將加入該程序使用的所有包含,並且該定義必須在文件中該變量的任何用法之前。不是一個完美的東西,但沒有IDE或完整的語言描述/管理工具,你只有文本。

另一種選擇是使用ctags。它理解C和C++語法(等等),並且可以使用命令行工具,emacs和vi等搜索變量和函數。

+0

的地方考慮一下。除了ctags,Semantic是Emacs用戶可能想要查看的另一個附加組件:http:// cedet.sourceforge.net/semantic.shtml – codelogic 2009-02-18 00:17:01

+0

謝謝,codelogic。是的,我剛剛發現它,並試一試:)再次感謝。 – 2009-02-18 00:24:11

11

您已經給出了最合適的工具:IDE。這是,正好是 IDE擅長的東西。爲什麼你不是想要使用IDE如果你發現沒有一個痛苦的發展?

請注意,Emacs,Vim等可以作爲IDE使用 - 我並不是說如果你想保持純文本的狀態,例如強制使用GUI的世界,因爲你在ssh方式連接。

(我真的不試圖是不禮貌在這裏。我只是覺得你已經打折了明顯的解決方案,無需說明原因。)

-1

如果您在Microsoft Visual工作工作室(我認爲你也可以用於C++,但需要在Windows工作站上工作)有一個易於訪問的右鍵菜單選項「轉到定義...」,它將帶您進入任何定義目前標記的變量,類型或方法。

-1

如果您堅持保留文本模式,您可以使用emacs或vi以及相應的插件來執行此操作。

但是,真的進入21世紀。

編輯:你評論說你是通過SSH來做這件事,因爲你需要建立遠程服務器集羣的速度。

在這種情況下,將驅動器安裝在本地計算機上並使用IDE,然後使用SSH進行構建。

1

用於變量聲明的常見模式的Grep。示例:*,&,>或字母數字,後跟一個或多個空格字符,然後是變量的名稱。或者是變量名稱,後跟零個或多個空白字符,然後是左括號或分號。除非它在真正奇怪的情況下(如某種宏觀)被定義,否則它每次都有效。

5

我虔誠地使用cscope和ctags-exuberant。在我的代碼庫上運行一次,然後在Vim中運行它,我可以使用各種命令,例如^]或[D或[我或類似的命令來查找給定單詞的任何定義或聲明。

這與Mega-IDE如Visual Studio和Eclipse提供的功能類似。

Cscope還可以作爲執行這些搜索的獨立工具。

2

我用以下三種方法之一:

  1. 我會用CTags處理我的源代碼樹(夜間),然後可以很容易地使用Vim的(或其他編輯器)的命令來直接跳到定義。
  2. 我只使用grep(linux)或findstr(windows)來查找所有出現的變量名稱或類型。定義通常很明顯。
  3. 在Vim中,你可以在範圍中向後搜索並且經常找到你正在尋找的東西。
1

在VIM可以使用gd看到局部變量聲明或gD看到全局變量聲明,如果他們在當前文件正在定義。參考Go_to_definition_using_g

您還可以使用[i看到定義,而跳轉到它,或[I看到變量的所有出現在所有包含的文件,以及,這自然會顯示出定義爲好。

相關問題