启动程序抛出的调试器异常

时间:2014-10-25 10:17:08

标签: delphi

Project * .exe引发了异常类$ C0000005,带有消息
 access violation at 0x005d9e17:read of adddress 0x00000008

关于我的计划:
在form.formcreate()中,做一些初始化;然后启动一个线程,在其中初始化listview的列:

ListView.Columns.Add.Caption := 'Path';

只是这个子句抛出异常。如何调试此问题?

程序不会每次都抛出异常。我跑了10次,只有5次例外。

Stack:

:005d7e17 TListColumn.DoChange + $F    
:005d7f73 TListColumn.SetCaption + $23    
:004ccc74 ThreadProc + $4C    
:0040947a ThreadWrapper + $2A    
:76cf919f KERNEL32.BaseThreadInitThunk + 0xe    
:7732a8cb ntdll.RtlInitializeExceptionChain + 0x84    
:7732a8a1 ntdll.RtlInitializeExceptionChain + 0x5a

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,您正在尝试读取字段或在nil的对象引用上调用方法。

通常,您可以通过使用调试器确定哪个引用为nil来解决此问题,然后您应该能够确定如何解决问题。

您应该知道,您不能从主线程以外的线程访问VCL组件。我的猜测是,这实际上是访问冲突的原因。

使用Synchronize类的QueueTThread方法调用主线程上的代码。但是,作为一般原则,线程不应该执行UI工作。我想知道你是否应该考虑不同的设计。