Tôi thường thực hiện các phương pháp nhỏ để hỗ trợ gỡ lỗi, không được sử dụng trong chương trình thực tế. Thông thường hầu hết các lớp của tôi đều có phương thức AsString mà tôi thêm vào đồng hồ. Tôi biết Delphi 2010 có visualizers, nhưng tôi vẫn còn trên 2007.Làm cách nào để buộc trình liên kết bao gồm một hàm tôi cần trong quá trình gỡ lỗi?
Hãy xem xét ví dụ sau:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
type
TMyClass = class
F : integer;
function AsString : string;
end;
function TMyClass.AsString: string;
begin
Result := 'Test: '+IntToStr(F);
end;
function SomeTest(aMC : TMyClass) : boolean;
begin
//I want to be able to watch aMC.AsString while debugging this complex routine!
Result := aMC.F > 100;
end;
var
X : TMyClass;
begin
X := TMyClass.Create;
try
X.F := 100;
if SomeTest(X)
then writeln('OK')
else writeln('Fail');
finally
X.Free;
end;
readln;
end.
Nếu tôi thêm X.AsString như một chiếc đồng hồ, tôi chỉ nhận được "Chức năng được gọi là, TMyClass .AsString, đã bị loại bỏ bởi linker ".
Làm cách nào để buộc trình liên kết đưa vào? Thủ thuật thông thường của tôi là sử dụng sử dụng phương thức ở đâu đó trong chương trình nhưng không có cách nào thanh lịch hơn?
TRẢ LỜI: GJ cung cấp cách tốt nhất để làm điều đó.
initialization
exit;
TMyClass(nil).AsString;
end.
+1. Đó là những gì tôi thường làm. Đặt nó trong một khối khởi tạo để nó sẽ không được liên kết. –
Tôi đã chiến đấu với bản thân mình qua câu trả lời tôi nên chấp nhận - câu trả lời này hoặc câu trả lời khác của bạn với "mẹo được xuất bản". Tôi đã chọn cái này vì nó sẽ không ảnh hưởng đến phiên bản phát hành. –
Có, và nếu chức năng của bạn cần một số tham số như biến, chỉ cần viết trong phần khởi tạo: "nếu @AsString = nil sau đó;" thay vào đó, hãy đặt tham số trong. –