所產生的意外情況為c00000fd,在地址7C821AOB(kernel32!GetTickCount)處
delphi5開發,偶爾才會報錯,不知道遇到什么情況才報
uj5u.com熱心網友回復:
GetTickCount不會作系統呼叫,直接從行程的記憶體中取一個值回傳給程式,因此,出錯的原因,很可能是被Hook了uj5u.com熱心網友回復:
那請問樓上,怎么解決呢?uj5u.com熱心網友回復:
偶爾出錯,絕大多數正常的話,用以下這個方法應急
for i:=1 to 10000 do begin
try
xx := GetTickCount();
Break;
except
end;
end;
其實應該恢復GetTickCount函式頭5或者6個位元組,以及恢復跳轉表地址,來讓Hook失效.
uj5u.com熱心網友回復:
但是我沒有呼叫GetTickCount函式,是通訊的時候,應該是系統自動呼叫了這個函式,在事件查看器里看到報的這個錯誤是 try
RecStream := TWinSocketStream.Create(csSocket.Socket, iWaitTime*1000);
try
FillChar(cRecBufs, iRecLen + 1, 0);
if RecStream.WaitForData(iWaitTime* 1000) then
begin
result := BR_RECEIVE_FAILED;
.....
這段代碼可能是呼叫了那個函式,收報文的時候,那怎么解決啊?
uj5u.com熱心網友回復:
這樣問題就有點復雜了。除錯的時候出錯?還是客戶哪里出錯?
uj5u.com熱心網友回復:
沒有除錯,每天都會出現,但是測驗的時候很難出現,只有當生產的時候,會出現2-3次,應用會死掉,然后在事件查看器下就會看到這個報錯,但最郁悶的是應用捕獲不到這個錯。換過機器,但是換過機器報錯也不是這個錯了又,報這個錯的機器是一臺服務器,且是window2003的系統。uj5u.com熱心網友回復:
應該是野指標訪問問題。重編一個帶有除錯資訊的程式,加上TJvDebugHandler或Eurekalog或其它類似堆疊資訊輸出工具,記錄出錯時的堆疊呼叫資訊。這樣可方便追蹤錯誤根源。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/121153.html
上一篇:怎么顯示這樣的表單?
下一篇:在DBGrid中修改
