2012-10-15 27 views
3

我在重新編譯特定單元(MyClass)後收到訪問衝突,除非我做了清理。這個錯誤顯然是對一個空對象的調用(寫入地址00000000),但是當我嘗試對它進行操作時,編譯器將不允許我插入代碼,我認爲發生錯誤。 (在同一個對象中的一個方法內部。當我跟蹤到方法時,在跟蹤到跟蹤代碼之前出現錯誤。)這發生在MyClass的使用單位中,而不是MyClass本身。訪問衝突,除非我在重新編譯之前清理

奇怪的是,如果我做一個乾淨的(或生成),然後重新編譯,程序運行良好。這會發生什麼原因?

更新

該應用程序使用通過AsyncCalls庫中創建多個線程。我使用若干個TEventTMultiReadExclusiveWriteSynchronizer對象來保持進程的順序和資源的保護。創建或釋放這些對象時是否需要特別注意?

+0

monolith exe或BPLs? –

+0

只是整體exe文件。 –

+0

可能在磁盤上是xxxxx.pas的mseveral副本?即使在調試信息丟失的情況下,您也可以嘗試在CPU窗口中追蹤 –

回答

1

請檢查項目設置中的輸出路徑。 爲已編譯的單位設置輸出路徑(例如「。\ $(Config)\ _ dcu」),然後再次檢查。

+0

沒有這樣的麻煩。據說。正如我所提到的,只有當我將源代碼修改爲某個特定單元(或者它的依賴關係)時纔會發生。不是每次重新編譯,它都可以工作很多次。其他沒有。 (但是,具體的事情讓我懷疑自己....) –

+0

我的建議是刪除所有DCU的..然後嘗試重建所有 – sybond

+0

不。刪除dcu也沒有得到它。 (注意:我想這就是我認爲乾淨的事情,乾淨的事情是幹什麼的?) –