Hiển thị phân cấp #incoide cho tệp C ++ trong Visual Studio


169

Vấn đề: Tôi có một dự án Visual C ++ lớn mà tôi đang cố gắng chuyển sang Visual Studio 2010. Đó là một sự pha trộn lớn của các công cụ từ nhiều nguồn khác nhau và ở nhiều độ tuổi khác nhau. Tôi đang gặp vấn đề vì một cái gì đó bao gồm cả winsock.hwinsock2.h.

Câu hỏi: Có những công cụ và kỹ thuật nào để hiển thị #includephân cấp cho tệp nguồn Visual Studio C ++?

Tôi biết về cl /Pviệc nhận đầu ra của bộ xử lý trước, nhưng điều đó không hiển thị rõ ràng tệp nào bao gồm các tệp khác (và trong trường hợp này, /Pđầu ra là 376.932 dòng dài 8-)

Trong một thế giới hoàn hảo, tôi muốn hiển thị phân cấp các tệp bao gồm các tệp khác, cùng với số dòng để tôi có thể nhảy vào các nguồn:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

2
Đối với những người tìm kiếm giải pháp GCC / Clang, hãy sử dụng gcc -H -fsyntax-only ...để xuất cấu trúc phân cấp. Tín dụng cho stackoverflow.com/a/18593344/427545
Lekensteyn

Câu trả lời:


234

Có một cài đặt:

Cài đặt dự án -> Thuộc tính cấu hình -> C / C ++ -> Nâng cao -> Hiển thị bao gồm

Điều đó sẽ tạo ra cây. Nó ánh xạ tới trình biên dịch chuyển đổi / showIncludes


20
Lưu ý: hệ thống phân cấp có thể được nhìn thấy trong cửa sổ đầu ra.
CannibalSmith

3
Nếu bất kỳ ai quan tâm: ngay cả khi bạn chọn bộ công cụ nền tảng Clang , bạn vẫn có thể "hiển thị bao gồm" nếu bạn thêm -HvàoC/C++ -> Command Line - Additional Options
lau

3
Vẫn không tốt như tính năng "bao gồm từ" của gcc, hiển thị phân cấp bao gồm trực tiếp liên quan đến lỗi thời gian biên dịch và cũng hiển thị số dòng.
Paul

2
Tôi đã thực hiện một regex nhanh mà tước Visual Studio bao gồm (mọi thứ trong Chương trình tệp (x86)). Bạn có thể sao chép + dán cửa sổ đầu ra của mình vào một ứng dụng như Notepad ++ và thực hiện tìm kiếm regex và thay thế bằng khoảng trống để loại bỏ tất cả VS bao gồm từ cây của bạn:1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
kjhf

2
Lưu ý rằng while / showIncludes có thể được bật cho một tệp nguồn riêng lẻ, nó sẽ không có hiệu lực trừ khi / showIncludes được đặt ở cấp dự án.
David Carr

20

Trình biên dịch cũng hỗ trợ chuyển đổi / showIncludes - nó không cung cấp cho bạn số dòng, nhưng có thể cung cấp một cái nhìn khá toàn diện về việc bao gồm đến từ đâu.

Đó là trong Cài đặt dự án -> Thuộc tính cấu hình -> C / C ++ -> Nâng cao -> Hiển thị bao gồm.


+1 Cảm ơn rất nhiều! (Nhưng tôi sợ xtofl nhận được Chấp nhận để nhanh hơn).
RichieHulum

17

Chúng tôi đã tìm thấy Bao bì là một công cụ rất mạnh. Nó không miễn phí (nhưng không đắt tiền) và nó cho phép chúng tôi nắm bắt được các vấn đề Bao gồm của chúng tôi và giảm thời gian biên dịch của chúng tôi từ 50 phút xuống còn 8 phút bằng cách cắt bỏ các khối lớn bao gồm chúng tôi không sử dụng.


5
Yow! Tôi đã chạy Bao gồm các tệp vi phạm và nó tạo ra một biểu đồ khiến tôi bật cười thành tiếng. Theo tính toán của tôi, tôi sẽ cần một màn hình 400 "để xem toàn bộ sự việc. Tôi nghĩ rằng chúng tôi vượt quá khả năng của mình để giúp đỡ. 8-)
RichieHulum

2
Cập nhật - công ty mẹ Bao gồm, ProFactor (www.profactor.co.uk) đã ngừng hoạt động, nhưng đang cung cấp các bản phát hành gần đây nhất miễn phí từ trang web trên. Mặt trái là nó chỉ hoạt động trên các phiên bản đầy đủ của Visual Studio từ VS2005 đến VS2013.
Dana

5

Không tốt như tính năng phân cấp bao gồm của gcc, tính năng này hiển thị phân cấp bao gồm dòng trực tiếp trong trường hợp có lỗi. Tùy chọn "hiển thị bao gồm" trong VS hiển thị mọi thứ, quá mức cần thiết khi gỡ lỗi phân cấp bao gồm các vấn đề về tệp.


Tôi chờ đợi điều này từ 5 năm rồi, mà tôi đã sử dụng với mingw.
tưởng tượng

2
Có lẽ thêm một số chi tiết về cách sử dụng nó, tài liệu ở đâu vv? Câu trả lời này hiện không thêm nhiều.
Sam Brightman

4

Đây là một công cụ FOSS của bên thứ 3 tốt. Bạn có thể xuất kết quả sang XML, sẽ bao gồm dữ liệu về số lần xuất hiện và số dòng.


4

Hiện tại có một plugin cho Visual Studio có tên là Bao gồm cả hộp . Nó có thể liệt kê phụ thuộc của bạn bao gồm và thực hiện nhiều việc hơn như xóa và biên dịch ngẫu nhiên để xem có bao gồm yêu cầu đó không.



2

cl / P sẽ hiển thị cho bạn các số dòng, sao cho bạn có thể cho biết bối cảnh nơi tệp tiêu đề được đưa vào.

Nếu bạn grep ra các dòng với ...

grep "^ # line" file.i

... Sau đó, bạn nên có một dấu hiệu khá rõ ràng về những tập tin đã gặp phải theo thứ tự của bộ xử lý.

Nếu đó là một sự cố một lần thì đây sẽ là một chẩn đoán khá nhanh.


2
Chắc chắn, nhưng điều đó mang lại cho tôi tám nghìn dòng đầu ra không có cấu trúc, không có hệ thống phân cấp.
RichieHulum

Tôi đã xem qua đầu ra cl / P khá lâu và tự hỏi liệu có công cụ nào tốt hơn cho công việc không. Bây giờ tôi đã phát hiện ra rằng có, đó là tuyệt vời. Câu hỏi rất chung chung và câu trả lời sẽ có ở đây trên SO mãi mãi để người khác tìm thấy.
RichieHulum

0

Tôi sử dụng DoxygenGraphViz .

nhập mô tả hình ảnh ở đây

Cài đặt cả hai. Đảm bảo chọn GraphViz làm công cụ để tạo sơ đồ phân cấp. Chọn "Sử dụng công cụ dấu chấm từ gói GraphVix".

Đồng thời đảm bảo bao gồm thư mục nhị phân từ GraphViz vào biến môi trường PATH của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.