Sample code for 30+ languages & platforms
Delphi DLL

Using DebugLogFilePath to Debug a Crash

If a crash is suspected to occur within a Chilkat method call, it can be debugged using the VerboseLogging and DebugLogFilePath as shown here.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Crypt2;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
crypt: HCkCrypt2;

begin
success := False;

// If a crash is suspected to occur within a Chilkat method call, it can be debugged using the VerboseLogging and DebugLogFilePath as shown here.
// 
// NOTE: The same technique applies for any Chilkat class that has the DebugLogFilePath property.
// Most Chilkat classes have DebugLogFilePath.

crypt := CkCrypt2_Create();

// First make sure VerboseLogging is turned on.
CkCrypt2_putVerboseLogging(crypt,True);

// Set the DebugLogFilePath to the path of a log file that will be created automatically.
// If the file already exists, Chilkat will append to it.
CkCrypt2_putDebugLogFilePath(crypt,'c:/someDir/debugLog.txt');

// Reproduce the problem.

// ...
success := CkCrypt2_VerifyP7M(crypt,'c:/someDir/someFile.p7m');
// ...

// If a crash occurred within Chilkat, then the debugLog.txt will contain information that
// can be sent to support@chilkatsoft.com

// ------------------------------------------------------------------------------------------------
// Note: Given that the debug log file is always appended, the log file might grow 
// to a very large size.  You can prevent the continual growth of the log file by
// deleting the log file at certain points, such as after a Chilkat method returns.
// 
// Given that we're only interested in the log file for Chilkat calls that crash or hang,
// it's OK to delete the log file after a Chilkat method that returns.
// 
// The next call to a Chilkat method will re-create the log file.  If the Chilkat call crashes
// or hangs, then you'll be left with just the log of the crash or hang.
// ------------------------------------------------------------------------------------------------

CkCrypt2_Dispose(crypt);

end;