2012-01-24 12 views
5

Tôi đã có một vấn đề lớn với breakpoints không được nhấn trong một Delphi 6 DirectShow DLL. Tôi sẽ tải DLL (AX) trong IDE và chạy nó với Graph Edit làm chương trình Host và không có điểm ngắt nào sẽ kích hoạt. Tôi đã thử di chuyển FastMM4 DLL vào thư mục dự án, gỡ bỏ FastMM4 hoàn toàn, bật và tắt Debug DCUs, làm sạch các thư mục dự án, hủy đăng ký và đăng ký lại DLL, mọi thứ tôi có thể nghĩ đến. Không có gì hiệu quả. Mỗi khi tôi chạy chương trình máy chủ tôi thấy tải DLL của tôi với thông báo "Không có thông tin gỡ lỗi" trong trình xem sự kiện. Sau đó, trong một tìm kiếm tuyệt vọng của Google, tôi đã tìm thấy một bài đăng cho C++ Builder đề nghị thử tùy chọn trình liên kết "remote debug symbols":DLL Các điểm ngắt không bị tấn công bằng các tùy chọn "các biểu tượng gỡ lỗi từ xa", tại sao và bất kỳ rủi ro bảo mật nào với những người này?

Project -> Options -> Linker (Tab) -> Exe và tùy chọn DLL (hộp nhóm)) -> "Bao gồm các ký hiệu gỡ lỗi từ xa" (đã chọn nó)

Đột nhiên điểm ngắt của tôi bắt đầu bị trúng. Dưới đây là câu hỏi của tôi:

1) Tại sao tính năng này hoạt động? Có phải vì tùy chọn hoặc vì tùy chọn này đã kích hoạt một số hoạt động của Trình biên dịch/Trình liên kết khác cố định mọi thứ? Tôi muốn biết để tôi có thể khắc phục sự cố này một cách đáng tin cậy trong tương lai khi nó xảy ra lần nữa.

2) Các biểu tượng gỡ lỗi từ xa có phải là một lập trình viên thù địch có thể sử dụng để theo dõi sâu chương trình của tôi không? Nói cách khác, chúng có phải là một nguy cơ bảo mật nếu để lại xung quanh?

+0

Không tranh đấu, xuất bản mã nguồn. – OnTheFly

+0

Phiên bản nào của Delphi? Delphis cũ hơn không tốt lắm trong việc gỡ lỗi các DLL. Tôi đã đôi khi tìm thấy nó cần thiết để đặt exe máy chủ trong cùng một thư mục như DLL. Nó chắc chắn phải đủ biên dịch DLL với các tùy chọn gỡ lỗi tiêu chuẩn. Không cần ký hiệu từ xa. –

+0

@DavidHeffernan. Delphi 6. –

Trả lời

5

1) Đó là do tùy chọn. Nếu không có thông tin biểu tượng gỡ lỗi, IDE của bạn không có ý tưởng đặt các điểm ngắt của bạn ở đâu. DCUs gỡ lỗi không liên quan gì đến nó - tùy chọn đó liên kết trong một bộ DCU VCL khác có chứa thông tin gỡ lỗi để bạn có thể thiết lập các điểm ngắt. Gợi ý hữu ích: tùy thuộc vào phiên bản của Delphi, những DCU đó không, trên thực tế, luôn đồng bộ với các biểu tượng gỡ lỗi của chúng.

2) Các tệp biểu tượng/bản đồ gỡ lỗi không được phát hành trong bản phát hành, đặc biệt nếu thông tin được chương trình xử lý nhạy cảm theo bất kỳ cách nào. Điều này đi cho bất kỳ ngôn ngữ lập trình nào.

Nếu bạn cần khả năng chẩn đoán phần mềm sau khi phát hành, kết hợp ngoại lệ, lỗi và xử lý xác nhận cung cấp cho bạn đầy đủ thông tin để phân loại lỗi từ nhật ký.

+0

Nhưng tất cả các dự án khác của tôi làm việc mà không có các biểu tượng gỡ lỗi * từ xa *. Tôi có các biểu tượng gỡ lỗi ("thông tin gỡ lỗi") đi kèm với chúng, nhưng không phải là các biểu tượng gỡ lỗi từ xa, đó là những thứ có tác dụng đối với DLL. Ngoài ra, tôi có thể suy ra từ câu trả lời của bạn rằng các công cụ như MadExcept và dấu vết ngăn xếp JVCL là * không * phụ thuộc vào các biểu tượng gỡ lỗi hiện diện sau đó? Tôi muốn phát hành mã của tôi với các dấu vết theo dõi chồng xếp JVCL (JDBG) để tôi có thể nhận được một dấu vết ngăn xếp với các ngoại lệ của tôi khi một ngoại lệ xảy ra. –

+1

Điều này dường như không trả lời được câu hỏi. Nó là chắc chắn có thể gỡ lỗi DLL mà không có các biểu tượng gỡ lỗi từ xa. –