[英]debug delphi application / DLL called inside a thread
问题描述 :
..... ( 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里面,我打开一个文件,读取数据并使用这些数据进行数据处理。
问:可能是什么原因以及如何调试此问题? 由于完整的代码序列约为15.000 LOC,因此无法发布更多行代码。
您可以像这样调试DLL:
您现在应该能够调试DLL中的代码。 在现代版本的Delphi中,调试主机可执行文件时,您还应该能够进入DLL代码。 这需要您使用调试信息构建DLL,并且主机可执行文件必须从DLL项目的输出路径中加载DLL。
您的实际问题听起来有些棘手。 访问冲突可能在错误代码执行后很长时间发生。 要进行调试,您可能首先确定引发异常的代码。 该代码的哪一部分的指针可能无效? 然后追溯到DLL中可能已修改该指针的所有内容。
如果静态分析没有帮助,则可以添加调试工具。 您需要:
您将在所有模块中都需要这些工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.