2011-06-30 28 views
5

Có cách nào để nhanh chóng tìm kiếm danh sách đầy đủ các đường dẫn mã tới một chức năng cụ thể trong dự án của tôi, để tìm hiểu xem một số chức năng đòn bẩy nhất định có gọi nó trực tiếp hay gián tiếp không? Ví dụ, một số đầu ra có thể để xác định xem MyLowLevelFunction có thể truy cập từ TargetFunction:Làm cách nào để tạo một cây gọi ngược cho một dự án Delphi?

đường Mã 1

 
ModuleA2.TopLevelFunction 
|--ModuleA1.SomeFunction 
|----Utility.MyLowLevelFunction 

đường Mã 2

 
ModuleB2.TopLevelFunction 
|--TargetModule.TargetFunction <-- This calls MyLowLevelFunction indirectly 
|----ModuleB1.SomeFunction 
|------Utility.MyLowLevelFunction 
+0

bản sao có thể có của [Hiển thị ngăn xếp cuộc gọi trong ứng dụng Delphi Win32] (http://stackoverflow.com/questions/258727/display-the-call-stack-in-a-delphi-win32-application) hoặc [ Cần một cách để định kỳ đăng nhập theo dõi ngăn xếp/ngăn xếp cuộc gọi] (http://stackoverflow.com/questions/2326980/need-a-way-to-periodically-log-the-call-stack-stack-trace-for- mọi phương thức-thủ tục) –

+1

Tôi có thể đã sai trên bản dupe. Bạn đang tìm kiếm một phân tích tĩnh của mã hoặc bạn đang tìm kiếm một cái gì đó trong thời gian chạy? –

+0

Tôi không nghĩ đây là một bản dupe. Đây là về một báo cáo cây cuộc gọi ngược lại (không phải là một ngăn xếp cuộc gọi), thường được thực hiện thông qua phân tích tĩnh mặc dù tôi cho rằng bạn có thể làm điều đó với một hồ sơ lấy mẫu. –

Trả lời

6

phân tích Pascal bởi Peganza đã một Reverse call tree bài báo cáo. Tôi là khách hàng và rất hài lòng với nó, mặc dù tôi chưa bao giờ sử dụng loại báo cáo cụ thể đó, thay vào đó, chỉ cần thay một đơn giản là cross-ref report mà nó cũng có.

Là một công cụ phân tích tĩnh lưu ý thú vị sẽ không tìm thấy các cuộc gọi gián tiếp, chẳng hạn như thông qua gọi lại sự kiện.

+0

Hi Warren, thật là may mắn khi nhận được câu trả lời từ người dùng của Pascal Analyzer như bạn :) Tôi đã tải xuống phiên bản đánh giá của Pascal Analyzer. Tuy nhiên phiên bản đánh giá không chứa tính năng "Báo cáo cây cuộc gọi ngược" cũng như "báo cáo chéo". Tôi đã tự hỏi liệu nó có thể giới hạn báo cáo cho các chức năng cụ thể? Lý do tôi hỏi như vậy là "báo cáo cây cuộc gọi" được tạo ra là một tệp văn bản có khoảng hàng trăm MB khiến việc tìm kiếm trở nên khó khăn. Cảm ơn bạn ~ – Jim

+1

+1 cho nhận xét sự kiện. –

+1

Jim: Đó là vấn đề cơ bản với hầu hết các báo cáo. Tôi đã viết một tiện ích đơn giản trong Delphi để lọc đầu ra của các báo cáo để chứa những gì tôi muốn, bởi vì hầu hết các báo cáo không chứa những gì tôi muốn. Hơn nữa, nếu dự án của bạn sử dụng các gói thời gian chạy, có vẻ như cần thiết để xây dựng một dự án nguyên khối (không gói), ngay cả khi bạn không bao giờ xây dựng nó, để có được tất cả các đơn vị của một giải pháp dựa trên gói được đưa vào một phân tích đơn lẻ. Có những giải pháp cho những hạn chế này. –

Các vấn đề liên quan