abc.exe 正在使用 xyz.dll。在運行 abc.exe(Delphi) 時,出現如下訪問沖突
專案 abc.exe 引發了例外類 EAccessViolation,并在模塊“xyz.dll”中顯示訊息“地址 39275E81 處的訪問沖突”。寫入地址 737A24A4"。
出于某種原因,我無法除錯 xyz.dll(這也是 delphi)。所以我想使用上面訊息中的地址來跟蹤 xyz.dll 中的代碼部分。如何找到那個代碼部分?還有其他選擇嗎?
提前致謝。
uj5u.com熱心網友回復:
有許多第三方工具可以跟蹤源代碼中的例外,或者您可以自己制作。這個簡單的使用 JCL 除錯程序:
procedure AnyExceptionNotify(ExceptObj: TObject; ExceptAddr: Pointer; OSException: Boolean);
var
ExceptLines: TStringList;
begin
ExceptLines := TStringList.Create;
try
JclLastExceptStackListToStrings(ExceptLines, False, False, True);
ExceptLines.Insert(0, 'ProcessID: ' IntToStr(GetCurrentProcessID));
ExceptLines.Insert(1, 'ThreadID: ' TThread.CurrentThread.ThreadID.ToString);
ExceptLines.Insert(2, (ExceptObj as Exception).Message);
ExceptLines.Insert(3, '[begin_stack_trace]');
ExceptLines.Append('[end_stack_trace]');
ExceptLines.SaveToFile('ExceptTrace.txt');
finally
ExceptLines.Free;
end;
end;
initialization
JclStartExceptionTracking;
JclAddExceptNotifier(AnyExceptionNotify);
通過這種方式,您將在代碼中注冊任何例外并將例外的呼叫堆疊存盤到檔案中以供進一步分析。
uj5u.com熱心網友回復:
就這樣?
您可以使用兩種方式:
1 Delphi Options > Debugger Option > Embarcadero Debugge > Language Exception,取消選中“Exception types ton ignore”中的所有選項。
2使用除錯器并查看所有物件,當您找到具有值的物件時,nil您就“發現了問題”。
請記住:訪問沖突錯誤是由訪問尚未創建的物件引起的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/357956.html
