Tôi có thể hiển thị kết quả của vòng lặp trong cửa sổ bảng điều khiển trong ứng dụng VCL cho mục đích gỡ lỗi không?Làm cách nào tôi có thể ghi vào cửa sổ bảng điều khiển để gỡ lỗi?
Trả lời
Trong Windows, cách đơn giản nhất để xuất thông tin gỡ lỗi là sử dụng OutputDebugString()
và sau đó sử dụng ứng dụng có thể nhận đầu ra đó. Trình xem sự kiện trong bản thân IDE Delphi có thể nhận được đầu vào đó, hoặc bạn có thể sử dụng ứng dụng DebugView từ SysInternals để lấy đầu ra trên một hệ thống chưa cài đặt IDE. AFAIK, GExperts cũng có một công cụ tương tự. Đó là bởi vì một ứng dụng GUI không theo mặc định một bàn điều khiển để viết đầu ra, nếu không bạn phải tạo một ứng dụng (xem câu trả lời của Gerry).
Một trong những ưu điểm của ứng dụng này là ứng dụng sẽ hoạt động mà không gặp vấn đề gì ngay cả khi cuộc gọi bị trượt vào bản phát hành (hoặc nếu có ý định), nhưng hãy cẩn thận để không xuất thông tin nhạy cảm đọc bằng một trong các công cụ ở trên.
Bạn cũng có thể tạo một biểu mẫu đặc biệt (có nghĩa là, với điều khiển ghi nhớ) và đầu ra tuyến đường tại đó.
Ngoài ra còn có các tiện ích ghi nhật ký nâng cao như SmartInspect, CodeSite và các thiết bị khác.
Cách đơn giản nhất là biên dịch dưới dạng ứng dụng bảng điều khiển, nhưng đặt mã khung ứng dụng bình thường trở lại trong dpr.
program Project2;
{$APPTYPE CONSOLE}
uses
Forms,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
writeln('Hello, World!');
Application.Run;
end.
Một phức tạp hơn một chút cách là sử dụng cuộc gọi Windows API AllocConsole:
program Project2;
uses
Forms,
SysUtils,
Windows,
Unit1 in 'Unit1.pas' {Form1};
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
AllocConsole;
writeln('Hello, World!');
Application.Run;
end.
Phương pháp này có (thường là) bất lợi của việc tạo ra một giao diện điều khiển mới nếu bạn đang gọi từ dòng lệnh. Từ bộ nhớ nhận được chuyển hướng đến công việc đòi hỏi một số mã hơn là tốt. Lợi ích là bạn có thể quyết định phân bổ bảng điều khiển tại thời gian chạy, thay vì biên dịch thời gian.
Tôi nghĩ những hành vi này khác đi nếu bạn gọi chương trình từ bảng điều khiển. Việc đầu tiên gắn vào cửa sổ giao diện điều khiển hiện có, thứ hai tạo ra một cái mới. – CodesInChaos
+1. Tôi thích cách tiếp cận thứ hai. –
Gắn vào bảng điều khiển đầu tiên thường là hấp dẫn hơn –
Nếu bạn đã viết ứng dụng bảng điều khiển, bạn có thể thử chức năng OutputDebugString trong ứng dụng bảng điều khiển (Tôi không thử).
Hoặc bạn có thể chụp đầu ra của ứng dụng bảng điều khiển như trong Capture the output from a DOS (command/console) Window.
Ngoài ra, bạn có thể kiểm tra Console Application Runner Classes. Tôi sử dụng các lớp này. Tôi nghĩ rằng họ là tuyệt vời.
Delphi có tùy chọn này, hãy kiểm tra "Generate console application" trong tùy chọn trình liên kết cho dự án. I/O tiêu chuẩn sẽ được chuyển đến cửa sổ bảng điều khiển sẽ đi kèm với ứng dụng GUI của bạn. Sau đó, bạn có thể sử dụng Writeln
v.v. như bình thường.
đọc Output (hoặc Input) từ các tài liệu:
chương trình Delphi có một tiêu chuẩn tập tin đầu ra nếu họ có liên quan như giao diện điều khiển ứng dụng.
+1. Tôi nghĩ đây là giải pháp *. –
Cài đặt "tạo ứng dụng bảng điều khiển" sẽ đánh dấu PE thực thi dưới dạng ứng dụng bảng điều khiển. Xem ở đây để biết một số vấn đề khi trộn các loại thực thi: http://blogs.msdn.com/b/junfeng/archive/2004/02/06/68531.aspx –
@ldsandon - Tôi đọc mục nhập blog và không thể tìm thấy vấn đề bạn đề cập đến. Bạn có thể làm cho một báo ở đây? .. FWIW tùy chọn là có kể từ * Delphi 2 * và tôi đã không bao giờ đi qua một báo cáo QC hoặc khiếu nại hoặc vấn đề liên quan đến các tùy chọn. Mục đích duy nhất của tùy chọn là cung cấp I/O tiêu chuẩn cho một ứng dụng GUI. Đọc thêm: [Tiêu chuẩn và I/O] (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/standardroutinesov_xml.html) –
- 1. Gỡ lỗi C++/SDL với cửa sổ bảng điều khiển
- 2. Làm cách nào để ngăn cửa sổ bảng điều khiển đóng khi chạy ứng dụng bảng điều khiển?
- 3. Làm cách nào để tránh cửa sổ bảng điều khiển có tệp .pyw chứa os.system?
- 4. Làm cách nào để in thuộc tính của đối tượng vào Bảng điều khiển gỡ lỗi trong Xcode?
- 5. GCC/C cách ẩn cửa sổ bảng điều khiển?
- 6. Làm cách nào để tạm dừng cửa sổ bảng điều khiển trong tệp .pl và .bat?
- 7. Cách tạo tiện ích chrome để thêm bảng điều khiển vào cửa sổ gmail?
- 8. Eclipse ghi vào bàn điều khiển
- 9. Làm cách nào để nói với cmake không tạo cửa sổ bảng điều khiển?
- 10. Làm cách nào để tập trung vào điều khiển trong các hình thức cửa sổ
- 11. Làm thế nào tôi có thể viết đầu ra màu nhanh vào Bảng điều khiển?
- 12. Cách thêm UserControl vào Bảng điều khiển trên Cửa sổ WPF
- 13. Cửa sổ bảng điều khiển không thể bị giết bằng cách đóng hoặc qua Task Manager
- 14. Làm cách nào để bạn tải lại nguồn Python của mình vào cửa sổ bảng điều khiển trong Eclipse/Pydev?
- 15. cập nhật cửa sổ bảng điều khiển với java
- 16. Ẩn cửa sổ bảng điều khiển từ Process.Start C#
- 17. Làm cách nào để phát triển trình điều khiển cửa sổ không chạm vào phần cứng?
- 18. Tôi có thể hiển thị các điều khiển cửa sổ của người dùng bên trong IE8
- 19. Không thể đăng nhập vào bảng điều khiển quản trị jboss 7.1 trên các cửa sổ
- 20. Nhúng cửa sổ Bảng điều khiển bên trong Cửa sổ WPF
- 21. Làm cách nào để có cửa sổ chính trong Bộ điều khiển FXML?
- 22. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 23. Làm thế nào để gỡ lỗi cửa sổ mở rộng Safari mở rộng?
- 24. Làm cách nào để ghi vào bảng điều khiển trong Google App Engine?
- 25. Làm cách nào tôi có thể đặt kích thước cửa sổ của cửa sổ lô?
- 26. tiêu đề cửa sổ bảng điều khiển c
- 27. Tắt hiển thị cửa sổ bảng điều khiển
- 28. Làm cách nào tôi có thể quay lại đầu dòng trong bảng điều khiển?
- 29. Làm thế nào để phát hiện nếu tôi đang chạy trong bảng điều khiển
- 30. Làm cách nào để ẩn cửa sổ bảng điều khiển khi đóng băng các ứng dụng wxPython với cxFreeze?
FWIW, tôi muốn đề cập rằng điều này không trả lời câu hỏi, đó là * "Làm thế nào tôi có thể ghi vào cửa sổ * ** console để gỡ lỗi?" * –
Có thể bởi vì trong Windows ghi vào bàn điều khiển không phải là tốt nhất cách để gỡ lỗi? Windows không phải là Linux hoặc Java. –
OutputDebugString() chắc chắn là "đơn giản nhất". Tuy nhiên, khi bạn cần "mạnh mẽ", bạn nên sử dụng DIY với cửa sổ bảng điều khiển. Thực hiện tìm kiếm Google cho "Chúng tôi đã thấy các vấn đề trong nhiều năm với OutputDebugString() không đáng tin cậy vào những thời điểm" vì lý do "đơn giản nhất" và "mạnh mẽ" không giống nhau. Nếu nó không hoàn toàn phải làm việc mỗi lần, OutputDebugString() là tốt. –