2009-02-27 24 views
6

Tôi là một nhà phát triển làm việc trên Visual C++, nhưng trong dự án của tôi có một số thành phần Delphi. Tôi cần phải gỡ lỗi các thành phần Delphi để sửa chữa một số vấn đề.Làm thế nào để gỡ lỗi một tệp DLL trong Delphi

Những điều cần thiết để tạo tệp DLL trong gỡ lỗi và sau đó bắt đầu gỡ lỗi trong Delphi là gì?

Trả lời

20

Trong Delphi 7 bạn sẽ thực hiện việc này:

Dự án | Tùy chọn | Trình biên dịch | Gỡ lỗi | Thông tin gỡ lỗi (kiểm tra)

Sau đó, vào Chạy | Tham số | Ứng dụng máy chủ và nhập tên của exe của bạn.

Thêm một số điểm ngắt trong mã DLL của bạn rồi nhấp vào chạy. Exe của bạn sẽ được tải và bạn có thể gỡ lỗi các phần DLL trong IDE Delphi.

Nếu exe của bạn đang chạy, hãy nhấp Chạy | Đính kèm để xử lý

- Tôi đã thử nghiệm điều này và phát hiện ra rằng tôi cũng cần phải kiểm tra "Bao gồm biểu tượng gỡ lỗi từ xa" trên trang Linker lựa chọn dự án trong Delphi 7.

tôi đã có thể để có được một breakpoint để sử dụng Run | Các tham số cũng như Chạy | Đính kèm với các phương pháp xử lý. DLL thử nghiệm mà tôi đã tạo có một hàm stdcall duy nhất và được tải động bằng ứng dụng giao diện điều khiển Visual C++.

+0

@Chapel. Bạn có chắc là quá trình đính kèm có thể được sử dụng để gỡ lỗi DLL không? –

+0

Tôi đã làm điều tương tự nhưng điểm phá vỡ là không đánh. tôi nghĩ rằng sự phù hợp giữa mã và trình gỡ rối không được thiết lập. Sẽ không có khái niệm về PDB (hiện diện trong vc 6) sẽ ở đó. – coolcake

+1

biểu tượng gỡ lỗi từ xa không cần thiết – dummzeuch

4

Chúng tôi sử dụng điều này khá thường xuyên (sử dụng Delphi).

Hãy chắc chắn:

  1. Enable tất cả các tùy chọn gỡ lỗi trên tất cả các dự án (tập tin DLL (s)). Và vô hiệu hóa tối ưu hóa.
  2. Đảm bảo đặt ứng dụng máy chủ lưu trữ thành tệp EXE phù hợp.
  3. Tạo tệp DLL.

Bây giờ bạn có thể đặt điểm ngắt trong cả dll và exe. Và chạy tệp DLL từ IDE. Nó bắt đầu tệp EXE và dừng lại ở các điểm ngắt được yêu cầu.

Nó thậm chí hoạt động khi các tệp DLL được liên kết động (nếu chúng được giải phóng các chấm màu xanh sẽ biến mất).

0

Phương pháp mà Gamecat đề xuất là thứ tôi đã sử dụng trước đây.

Một cách khác là: Tôi có dự án DLL, nhưng tôi cũng thực hiện dự án "thử nghiệm băng ghế dự bị". Dự án "thử nghiệm băng ghế dự bị" có một dạng có thể trực tiếp thực hiện mã mà thường được sử dụng trong một DLL.

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