问题描述:
..... ( this code is executed inside a thread.execute
...
if fileexists(myFile) then
begin
// call functions inside a DLL
...
dll_process_data ( .....) ;
....
end;
..... (clean up )
write_clean_data_fct(...)
..... //
... // AV happens here inside kernel.dll , no further information
如果找不到该文件,则执行完整的例程/多线程算法没有任何问题;如果我添加其他文件,一些数据在dll中处理,这也没有遇到麻烦。 在write_clean_data_fct之后的某个地方,AV现在发生了。在dll中我打开文件读取数据并使用这些数据进行数据处理。
问:什么可能是reasin以及如何调试这个问题? #t可以发布更多代码行,因为完整的代码序列是~15.000 LOC。答案 0 :(得分:1)
您可以像这样调试DLL:
您现在应该可以调试DLL中的代码。在现代版本的Delphi中,您还应该能够在调试主机可执行文件时进入DLL代码。这要求您使用调试信息构建DLL,并使主机可执行文件从DLL项目的输出路径加载DLL。
你的实际问题听起来有点棘手。访问冲突可能在错误代码执行很久之后发生。要调试它,您可能首先确定引发异常的代码。该代码的哪一部分有一个可能无效的指针?然后追溯到DLL中可以修改该指针的任何内容。
如果静态分析无效,那么您可以添加调试工具。你会想要:
您需要在所有模块中使用这些工具。