Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

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 Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Crypt2;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  crypt: TCrypt2;

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 := TCrypt2.Create;

  //  First make sure VerboseLogging is turned on.
  crypt.VerboseLogging := 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.
  crypt.DebugLogFilePath := 'c:/someDir/debugLog.txt';

  //  Reproduce the problem.

  //  ...
  success := crypt.VerifyP7M('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.
  //  ------------------------------------------------------------------------------------------------


  crypt.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.