windows - Delphi 应用程序与偶尔崩溃的程序通信 - 供应商指责我的 Delphi 应用程序

标签 windows performance delphi debugging com

我编写了一个通过 COM 与第三方程序通信的 Delphi DLL。一些用户报告说第三方程序偶尔会崩溃。其他以相同方式使用该软件的人从未经历过崩溃。发生此崩溃时,第三方程序似乎在我的 DLL 应用程序中变得不可用。

供应商发誓说是Delphi DLL的编码方式有问题,虽然他们没有看过源代码也不知道DLL做了什么导致崩溃,但他们知道这是“某事” .

除了我相信第三方程序不应该因为我的 DLL 中的一些小问题而崩溃这一事实之外,让我们假设我的 DLL 中有一些东西需要修复。

我如何确定我的应用可能是如何导致这种情况的?有没有人有通过 COM 与这样的超敏感程序进行通信的经验?是否存在一些可能导致第三方程序崩溃的常见问题?

最佳答案

  1. 让客户满意。
  2. 不要假设它不是您的 dll,它可能是。即使“以相同方式使用该软件的其他人从未经历过崩溃”,也可能是使用不同的数据,它会做不同的事情......
  3. 我建议您将日志记录设置为“特殊”诊断版本中的文本文件。
  4. 记录所有内容、您的参数、异常情况以及您正在执行的步骤。甚至每个函数的开始和结束,以及每一行。

这是它的样子......

Loaded DLL
Started MyFunction1 with parameters: 1,4,hello
   1
   2
   ...
   500
Ended MyFunction1

为此,我设置了一些函数(在它们自己的单元中):

// opens a text file (fixed name), and appends to it.
function InitializeLog; 

// closes the file
function CloseLog;      

//add a log line.
function Log(message:string='', startNewFunction:boolean:False); 

你可以这样调用它:

function MyFunction1(Integer,Integer,String);
begin
  try
    Log('Loaded DLL');

    //use inttostr and do some string concats to get the params
    Log('Started MyFunction1 with parameters: 1,4,hello',true); 

    //Then every other line:
    Log; 
    //this would increment a global variable FuncLine:Integer
    //and write it to the file.    

  except
    On E:Exception (Log('***'+E.Message));
  end;
end;

像这样的东西应该有一个 {$DEFINE} 来启用这些日志记录功能,以启用/禁用诊断日志记录。

This could also be useful.

关于windows - Delphi 应用程序与偶尔崩溃的程序通信 - 供应商指责我的 Delphi 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044518/

相关文章:

delphi - 在Delphi的TWebbrowser中保存特定图像?

c++ - 如何在 opencv 中计算每秒帧数?

performance - 一个缓慢的 ActiveMQ 消费者导致其他消费者变慢

c - Windows C 运行时 _close(fd) 不关闭文件

Linux 套接字缓冲区不平衡

python - 按类别过滤 Pandas 数据框的最快方法

Delphi - 将两个 exe 转换为一个服务?

delphi - Indy 的强大单向消息

使用 Play 框架 2.3 时出现 java.lang.IllegalArgumentException

c++ - 如何以编程方式删除 Windows 中损坏的快捷方式