2010-11-05 28 views
6

Đôi khi tôi đang gỡ lỗi từng bước, ngay trước một Sự kiện FormCreate hoặc ngay sau khi trình gỡ lỗi FromDestroy bắt đầu mở các đơn vị DevExpress (cxContainer.pas, ...) và trước khi FormCreate "F8" dẫn tôi đến cxContainer thay vì đi vào dòng tiếp theo của mã của tôi.Delphi: làm cách nào để loại trừ các đơn vị khỏi trình gỡ lỗi?

(đây chỉ là một ví dụ, nó có thể xảy ra tất nhiên với bất kỳ thư viện của bên thứ 3)

Làm thế nào để nói với các chương trình gỡ rối "debug chỉ đơn vị của tôi" (chỉ các tập tin pas được liệt kê trong tập tin DPR?)

Tất nhiên đôi khi nó rất hữu ích để gỡ lỗi các thư viện, nhưng trong hầu hết các trường hợp nó không phải là.

+1

Xem thêm [Cách bỏ qua các phần mã trong khi gỡ lỗi?] (Http://stackoverflow.com/questions/449159/in-delphi-how-to-skip-sections-of-code-while-debugging) –

Trả lời

25

Bạn nên tuân theo quy ước VCL cho các thành phần của bên thứ ba:

  • đường dẫn đầu ra thay đổi DCU trong tất cả các gói của bên thứ ba vào một thư mục khác với thư mục mà bạn lưu trữ các tập tin PAS.
  • Biên dịch từng gói một lần trong chế độ Gỡ lỗi và lưu các tệp DCU được tạo trong một thư mục (ví dụ: DCU gỡ lỗi).
  • Biên dịch từng gói một lần nữa, nhưng lần này ở chế độ Phát hành và lưu các tệp DCU được tạo trong một thư mục (ví dụ: DCU phát hành).
  • Chuyển đến tùy chọn Delphi và thêm đường dẫn phát hành DCUs vào "Đường dẫn thư viện".
  • Trong tùy chọn Delphi, thêm đường dẫn của tệp nguồn vào "Đường dẫn duyệt web".
  • Trong tùy chọn Delphi, thêm đường dẫn gỡ lỗi DCU vào "Gỡ lỗi đường dẫn DCU".

Bằng cách này, Delphi sẽ chỉ nhìn thấy DCU phát hành của thành phần bên thứ ba đó khi bạn đang biên dịch dự án của mình, vì vậy trình gỡ rối không thể bước vào mã nguồn. Mặt khác, vì đường dẫn nguồn được bao gồm trong "Đường dẫn duyệt web", bạn vẫn có thể điều hướng đến mã nguồn bên trong IDE bằng Ctrl + Nhấp vào tên đơn vị hoặc bất kỳ thứ gì được xác định trong các đơn vị đó.

Nếu bạn muốn gỡ lỗi thành phần, bạn có thể chuyển đến "Dự án | Tùy chọn | Trình biên dịch Delphi | Biên dịch" và bật "Sử dụng gỡ lỗi .dcus". Điều này sẽ buộc trình biên dịch sử dụng "Gỡ lỗi đường dẫn DCU" thay vì "Đường dẫn thư viện".

VCL hoạt động giống nhau, thông thường bạn không bước vào mã nguồn VCL khi bạn đang gỡ lỗi dự án của mình, nhưng nếu bạn bật "Sử dụng gỡ lỗi .dcus", bạn cũng có thể gỡ lỗi mã nguồn VCL.

JVCL cũng tổ chức các gói và mã nguồn theo cùng một cách.

EDIT: Nếu bạn áp dụng cách này, và muốn có trình duyệt mã (Ctrl + Click) ngày làm việc; xin lưu ý rằng khi bạn biên dịch phiên bản phát hành của các gói, bạn phải đặt Thông tin tham chiếu biểu tượng trong "Project | Options | Delphi Compiler | Compiling" thành "Reference Info"; nếu không, Ctrl + Nhấp chuột sẽ không hoạt động đối với các đơn vị đó. Theo mặc định, cấu hình Phiên bản phát hành đặt Thông tin tham chiếu biểu tượng thành Không có gì.

+0

+1 Câu trả lời rất toàn diện. Và tôi đã học được một thủ thuật đã biết. Đã thấy đường dẫn gỡ lỗi dcu, nhưng nó đã không "nhấp" wrt làm thế nào để đưa nó vào sử dụng tốt. Cảm ơn vì điều đó. Chỉ có một nhược điểm mà tôi thấy với nó: "sử dụng debug dcu" bây giờ có nghĩa là bạn sẽ sử dụng debug dcu cho tất cả các thư viện của bạn khi bạn thường chỉ có một bạn muốn gỡ lỗi. Trong trường hợp đó, thường dễ dàng thay đổi đường dẫn thư viện để chỉ thư mục dcu gỡ lỗi cho thư viện đó ... –

+0

Bạn có thể mong đợi một Nhà phát triển sử dụng Delphi trong 10 năm qua để biết điều này, nhưng tôi cho một người thì không.

1

Tắt thông tin gỡ lỗi trong các đơn vị bạn không muốn trình gỡ lỗi tham gia.

+0

Thêm vào để lưu những người khác từ tìm kiếm này như tôi đã làm: Điều này có thể được thực hiện với chỉ thị trình biên dịch {$ D-} trong các đơn vị mà bạn không muốn gỡ lỗi. – RobertFrank

2

Chỉ có một cách để báo cho trình biên dịch không gỡ lỗi một đơn vị: biên dịch nó mà không cần thông tin gỡ lỗi.

Nếu bạn có nguồn vào thư viện, bạn có thể xây dựng lại gói sau khi đã tắt tùy chọn trình biên dịch "bao gồm thông tin gỡ lỗi" cho từng gói trong thư viện. Nếu bạn may mắn, thư viện của bạn sẽ bao gồm một tệp .inc chỉ định các tùy chọn trình biên dịch họ cần và chúng bao gồm trong mỗi đơn vị. Trong trường hợp đó, tất cả những gì bạn phải làm là chỉnh sửa tệp inc này và xây dựng lại tất cả các gói.

Nếu bạn không có nguồn vào thư viện của mình, nhà sản xuất thư viện có thể đã cung cấp hai bộ DCU: một bộ được biên dịch, bộ kia không có thông tin gỡ lỗi. Trong trường hợp đó, chỉ cần trỏ đường dẫn thư viện của bạn đến đường dẫn bạn cần.

2

Giải pháp nhanh chóng và đơn giản là vô hiệu hóa công tắc DEBUG ({$ D-}) cho bất kỳ thư viện nào bạn đang sử dụng. Nhiều thư viện (bao gồm DevExpress) sử dụng tệp bao gồm toàn cầu, thường ở đầu mỗi tệp nguồn hoặc ngay phía trên hoặc bên dưới câu lệnh "đơn vị" (ví dụ: giao diện đơn vị cxContainer; {$ I cxVer.inc}). Mở bao gồm tệp (bấm vào nó và nhấn CTRL-Enter) và thêm {$ D-} ngay trên đầu, và nhận xét ra bất kỳ {$ D +} hiện có nào.

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