2012-03-27 29 views
8

Đây là một vấn đề mà tôi đã có gần đây mà chỉ là một nỗi đau phổ biến cho những người khác ở đây.Làm cách nào để nhanh chóng tìm kiếm tất cả các tệp tiêu đề được bao gồm trong một dự án cho một hàm hoặc macro cụ thể?

Tôi đang làm việc với mã C cũ của người khác và cần tìm nơi một hàm hoặc macro được xác định. Mã số #include s một loạt các thư viện hệ thống tiêu chuẩn khác nhau ngoài các thư viện từ dự án cụ thể.

Có một công cụ hoặc kỹ thuật để nhanh chóng tìm thấy một hàm, macro cụ thể, hoặc toàn cầu khác cho vấn đề đó được xác định không?

tôi đã cố gắng:

grep -R 'function' /usr/lib 

và tương tự * nix/bash-fu khác với thành công chỉ hạn chế và rất nhiều trấu gây phiền nhiễu để tiêu hủy. Một trong những bạn lập trình sage ra phải có một giải pháp tốt cho kịch bản dường như phổ biến này.

Tôi đã rất ngạc nhiên khi không tìm thấy một câu hỏi khác về nỗi đau đặc biệt này ở đây hoặc trong các tìm kiếm của tôi về interwebs. (Tôi chắc chắn sẽ có những bình luận tức giận nếu tôi bỏ lỡ một ... ;-))

Xin cảm ơn trước vì lời khuyên nào!

+1

Chúng tôi có sự kết hợp giữa Opengrok và Doxygen, giúp một chút ... – BoBTFish

Trả lời

4

Sử dụng etags/ctags từ số exuberant ctags project kết hợp với trình chỉnh sửa (emacs, vim) để hiểu chúng hoặc GNU GLOBAL.

Ồ, và nếu bạn tình cờ sử dụng automake, nó sẽ tạo ra một mục tiêu TAGS. Vì vậy, không cần cho các cuộc gọi thủ công phức tạp đến {c,e}tags.

+0

Cảm ơn. Mặc dù tôi đã sử dụng ctags trước đây, tôi đã không nhận ra tôi có thể sử dụng chúng cho các thư viện hệ thống hiện có. Tôi thích khả năng của GNU GLOBAL cũng thể hiện các trường hợp của một hàm (tức là ánh xạ ngược lại những gì CTAGS làm). – JJC

1

Sử dụng ctags/cscope + vim/emacs

bạn có thể google để sử dụng chi tiết.

nếu bạn sử dụng ctags + vim, bạn có thể:

1.Go vào thư mục /usr/include, thực thi ctags -f tags1 -R . tạo thẻ

thẻ 2.generate cho mã của bạn trong thư mục mã của bạn ctags -f tags2 -R.

3.run :set path+=tags1,tags2 trong vim bạn

4.under một chức năng hoặc marco thử CTRL+]

0

vim + ctags là cách để thực hiện. Bạn có thể nhảy đến và quy định chức năng, các biến toàn cầu, macro, vv vv

FYI, browsing programs with tags

Ngoài ra, nếu bạn muốn nhanh chóng chuyển đổi giữa c và các file .h, vui lòng tham khảo this blog

0

bạn có thể sử dụng cscope hoặc emacs/vim + xcscope.el để thực hiện điều đó dễ dàng.Tôi nghĩ rằng đó là bột hơn ctage và etage.

0

Cung cấp các tiêu đề chính xác được bao gồm trực tiếp hoặc gián tiếp xác định nội dung bạn tìm kiếm, hầu hết các IDE đều có chức năng chuyển sang định nghĩa hoạt động.

Cách tiếp cận thẻ tất nhiên là tốt đẹp vì chúng không phụ thuộc vào các tiêu đề được bao gồm chính xác.

1

Đây là những gì bạn có thể làm, giả sử bạn sử dụng gcc, nếu không chỉ sửa đổi nó cho phù hợp.

gcc -E myfile.c | grep '^#' | cut -f 3 -d ' ' | sort |uniq | xargs -n 1 grep -l "MYMACROORFUNCTIONNAME" 
Các vấn đề liên quan