2009-02-17 11 views
7

Nhiều lần khi tôi xem mã người khác, tôi chỉ muốn tìm vị trí và cách xác định biến. Thông thường những gì tôi làm bây giờ là tìm loại biến cho đến khi tôi tìm thấy định nghĩa, đó là rất tốn thời gian. Và tôi đoán rằng có một số công cụ có thể giúp tôi trong tình trạng này. Bất kỳ gợi ý nào trong một số công cụ hoặc lệnh để giúp tôi trong nhiệm vụ này ?.Bất kỳ chương trình hoặc thủ thuật nào để tìm định nghĩa của biến?

Tôi biết rằng bằng cách sử dụng GUI và tạo dự án, việc này được thực hiện tự động Tôi đang nói về một cách để thực hiện việc này mà không cần GUI. Tôi chỉ làm việc với chế độ văn bản. Tôi đang chạy dưới Linux và tôi đang sử dụng C/C++, nhưng đề xuất cho các ngôn ngữ khác được chào đón.

Cảm ơn rất nhiều.

Một giải pháp khả thi

Michel trong một trong những nhận xét của ông đề xuất một đơn giản là một giải pháp hiệu quả xác định một lần nữa biến, trong trường hợp đó trong thời gian biên dịch, trình biên dịch sẽ thông báo cho nơi là definiton trước. Tất nhiên để áp dụng giải pháp này, chúng ta cần phải suy nghĩ trước đây ở địa phương của biến.

+0

bạn ít nhất có thể chỉ định ngôn ngữ;) – devio

+0

Tôi rất thành C++ mà bây giờ tâm trí của tôi chỉ nghĩ rằng chỉ tồn tại một langauge – Eduardo

+0

Phương pháp xác định lại biến không phải là giải pháp. Bạn có các không gian tên khác nhau. Ví dụ, nếu bạn đang tìm kiếm một biến có tên là "trung bình", bạn có thể định nghĩa nó trong một phương thức hoặc hàm, hoặc trong một không gian tên khác (có cùng tên) và nó không phải là một lỗi. –

Trả lời

8

Chỉnh sửa: OK, bạn nói bạn đang sử dụng C++. Tôi đang chỉnh sửa câu trả lời của mình. Tôi sẽ sử dụng tiền xử lý C và sau đó grep cho biến. Nó sẽ xuất hiện ngay từ đầu.

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

Trình tiền xử lý trước sẽ tham gia tất cả những gì mà chương trình sử dụng và định nghĩa phải trước khi sử dụng biến đó trong tệp. Không phải là một điều hoàn hảo, nhưng không có một IDE hoặc một công cụ quản lý/mô tả ngôn ngữ hoàn chỉnh, bạn chỉ có văn bản.

Một tùy chọn khác sẽ sử dụng ctags. Nó hiểu cú pháp C và C++ (trong số những người khác), và có thể được tìm kiếm cho các biến và chức năng bằng cách sử dụng các công cụ dòng lệnh, emacs và vi, trong số những người khác.

+0

Ngoài ctags, Semantic là một add-on mà người dùng Emacs có thể muốn kiểm tra: http: // cedet.sourceforge.net/semantic.shtml – codelogic

+0

Cảm ơn, codelogic. Có, tôi chỉ phát hiện ra nó và cho nó một thử :) Cảm ơn một lần nữa. –

11

Bạn đã đưa ra công cụ thích hợp nhất: một IDE. Đây là chính xác loại điều mà một IDE vượt trội tại. Tại sao bạn lại không phải muốn sử dụng một IDE nếu bạn đang phát triển đau đớn mà không có ai?

Lưu ý rằng Emacs, Vim v.v. có thể hoạt động như IDE - Tôi không nói về việc ép bạn thế giới của GUI nếu bạn muốn ở trong tình huống chỉ có văn bản, ví dụ: bởi vì bạn đang SSHing trong.

(Tôi thực sự không cố gắng để được thô lỗ ở đây. Tôi chỉ nghĩ rằng bạn đã giảm giá các giải pháp rõ ràng mà không giải thích lý do tại sao.)

+0

Lý do tại sao tôi giảm giá đó, đó là bởi vì thông thường tôi sử dụng GUI nhưng bây giờ tôi đang làm việc trong một dự án nhỏ chỉ trong chế độ SSHing và tôi chỉ đang tìm kiếm một cái gì đó đơn giản. Bạn trông không thô lỗ. Thx – Eduardo

+0

Trong trường hợp đó tôi sẽ sử dụng Emacs như một IDE. Tôi sẽ ngạc nhiên nếu nó không có một "đi đến định nghĩa" một nơi nào đó. –

+0

AFAIK, Emacs không có chức năng như vậy trong hộp, mặc dù ctags và Semantic, hai add-on, cung cấp nó. – codelogic

-1

Nếu bạn làm việc trong Microsoft Visual Studio (mà tôi nghĩ bạn cũng có thể sử dụng cho C++, nhưng sẽ yêu cầu làm việc trên máy trạm Windows) có tùy chọn menu chuột phải có thể truy cập dễ dàng cho "Go to Definition ...", sẽ đưa bạn đến định nghĩa của bất kỳ biến, loại hoặc phương thức được đánh dấu hiện tại.

+0

Trong câu hỏi tôi chỉ định không có GUI vì tôi đang làm việc ở chế độ văn bản – Eduardo

+0

Chưa kể rằng bạn đã bỏ đi một từ: có thể. Tôi đã không thấy rằng đó là chút đáng tin cậy nhất. Đôi khi nó hoạt động và đôi khi nó không. –

-1

nếu bạn nhấn mạnh vào việc duy trì chế độ văn bản, bạn có thể thực hiện việc này bằng các emacs hoặc vi với các trình cắm thích hợp.

Nhưng thực sự, chuyển sang thế kỷ 21.

EDIT: Bạn nhận xét rằng bạn đang thực hiện việc này qua SSH vì bạn cần tốc độ xây dựng của cụm máy chủ từ xa.

Trong trường hợp đó, hãy gắn ổ đĩa trên máy cục bộ của bạn và sử dụng IDE và chỉ cần SSH để khởi chạy một bản dựng.

+0

Việc lắp ổ đĩa trên máy cục bộ đôi khi không thể thực hiện được. Tôi thường làm việc ở nhà và phải vào SSH vì sysadmin của chúng tôi sẽ không cho phép mọi người gắn kết các ổ đĩa từ bên ngoài. Vì vậy, tôi cũng sử dụng các emacs. – Frank

+0

Bạn có thể thiết lập kết nối X từ xa qua đường hầm không? –

+0

@Mr Fooz nếu bạn hỏi tôi, không có ý tưởng, tôi cũng không muốn gặp rắc rối với quản trị viên Tôi không có mối quan hệ rất tốt với anh ta – Eduardo

1

Grep cho các mẫu phổ biến cho các khai báo biến. Ví dụ: *, &,> hoặc một chữ số và theo sau là một hoặc nhiều ký tự khoảng trống, sau đó là tên của biến. Hoặc tên biến theo sau là 0 hoặc nhiều ký tự khoảng trống, sau đó là dấu ngoặc đơn trái hoặc dấu chấm phẩy. Trừ khi nó được xác định trong những tình huống thực sự kỳ lạ (như với một số loại macro), nó hoạt động mọi lúc.

+0

Vâng, tôi thường làm điều đó, nhưng tôi đang tìm kiếm thứ gì đó "chuyên nghiệp" – Eduardo

+0

Bạn luôn có thể xác định lại biến và chờ một lỗi biên dịch cho bạn biết nơi khai báo trước đó. Bất cứ điều gì chuyên nghiệp hơn có thể sẽ chỉ là "sử dụng một IDE." – Michel

+0

Đó là một mẹo hay – Eduardo

5

Tôi sử dụng cscope và ctags-exuberant tôn giáo. Chạy nó một lần trên cơ sở mã của tôi và sau đó trong Vim, tôi có thể sử dụng các lệnh khác nhau như ^] hoặc [D hoặc [I hoặc tương tự để tìm bất kỳ định nghĩa hoặc khai báo nào cho một từ nhất định.

Điều này tương tự như các cơ sở được cung cấp bởi các siêu-IDE như Visual Studio và Eclipse.

Cscope cũng hoạt động như một công cụ độc lập thực hiện các tìm kiếm này.

2

tôi sử dụng một trong ba phương pháp:

  1. tôi sẽ sử dụng CTags để xử lý cây nguồn của tôi (đêm) và sau đó có thể dễ dàng sử dụng các lệnh trong Vim (hoặc biên tập viên khác) để nhảy ngay đến các định nghĩa.
  2. Tôi sẽ chỉ sử dụng grep (linux) hoặc findstr (windows) để tìm tất cả các lần xuất hiện của tên hoặc loại biến. Định nghĩa thường khá rõ ràng.
  3. Trong Vim, bạn chỉ có thể tìm kiếm ngược trong phạm vi và thường tìm thấy những gì bạn đang tìm kiếm.
1

Trong VIM bạn có thể sử dụng gd để xem các khai báo biến cục bộ hoặc gD để xem các khai báo biến toàn cầu, nếu chúng được xác định trong tệp hiện tại. Tham khảo Go_to_definition_using_g

Bạn cũng có thể sử dụng [i để xem định nghĩa mà không cần nhảy hoặc [I để xem tất cả các lần xuất hiện của biến trong tất cả các tệp được bao gồm, cũng sẽ hiển thị định nghĩa một cách tự nhiên.