我编写了一个通过 COM 与第三方程序通信的 Delphi DLL。一些用户报告说第三方程序偶尔会崩溃。其他以相同方式使用该软件的人从未经历过崩溃。发生此崩溃时,第三方程序似乎在我的 DLL 应用程序中变得不可用。
供应商发誓说是Delphi DLL的编码方式有问题,虽然他们没有看过源代码也不知道DLL做了什么导致崩溃,但他们知道这是“某事” .
除了我相信第三方程序不应该因为我的 DLL 中的一些小问题而崩溃这一事实之外,让我们假设我的 DLL 中有一些东西需要修复。
我如何确定我的应用可能是如何导致这种情况的?有没有人有通过 COM 与这样的超敏感程序进行通信的经验?是否存在一些可能导致第三方程序崩溃的常见问题?
最佳答案
- 让客户满意。
- 不要假设它不是您的 dll,它可能是。即使“以相同方式使用该软件的其他人从未经历过崩溃”,也可能是使用不同的数据,它会做不同的事情......
- 我建议您将日志记录设置为“特殊”诊断版本中的文本文件。
- 记录所有内容、您的参数、异常情况以及您正在执行的步骤。甚至每个函数的开始和结束,以及每一行。
这是它的样子......
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} 来启用这些日志记录功能,以启用/禁用诊断日志记录。
关于windows - Delphi 应用程序与偶尔崩溃的程序通信 - 供应商指责我的 Delphi 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044518/