Jump to content

.. best way to find a EAccessViolation ???


erich.wanker

Recommended Posts

Hi ..

now - i am searching 2 days to find the errors...

What is the best way to find a EAccessViolation ?? 

  • The 1st. error comes by starting my project ..
  • the 2.nd error comes if i showmodal a simple UniForm

1.) Versatile.dll: 000036F0: 10:11:07 [Zugriffsverletzung bei Adresse 47CC2612 in Modul 'Versatile.dll'. Lesen von Adresse 00000648-::1]:EAccessViolation : Zugriffsverletzung bei Adresse 47CC2612 in Modul 'Versatile.dll'. Lesen von Adresse 00000648 : Addr: $47CC2612
2.) Versatile.dll: 00003148: 10:11:10 [::1]:EAccessViolation : Zugriffsverletzung bei Adresse 47CDFA61 in Modul 'Versatile.dll'. Schreiben von Adresse 00000000 : Addr: $47CDFA61

 

I user Win10 (32Bit) - Delphi XE4 .. Firebird sql Server 2.5 (zeos Lib) 

 

ThanX

Erich

Link to comment
Share on other sites

Hi .. thanX for your support ..

 

1 Question ...i installed Eurekalog ... imported the UniGui settings ..But nothing happens

 .. no informations or subfolder are created in htdocs-folder of Apach server - where the unigui is located

 

i have in my dpr file this ( the manual of Unigui just talks about EXE Files - i need DLL)

library Versatile;

uses
  EAppDLL,
  uniGUIISAPI,
  Forms,
  ServerModule in 'ServerModule.pas' {UniServerModule: TUniGUIServerModule},
  MainModule in 'MainModule.pas' {UniMainModule: TUniGUIMainModule},

...

..

{$R *.res}


exports
  GetExtensionVersion,
  HttpExtensionProc,
  TerminateExtension;

end.

 

Link to comment
Share on other sites

hi Farshad :-)

 

if i add

  EMemLeaks,   
  EResLeaks,
  ExceptionLog7,

to my dll - project and click "compiling" .. delphi delets the 3 lines .. just "EAppDLL," exists ..

"Please see unigui docs."  ->  the only information i found is: http://unigui.com/doc/online_help/index.html?eurekalog.htm

 

 

 

Link to comment
Share on other sites

push :-)

I use Delphi XE4 / Win10 / Apache Webserver 2.4

My Steps

  • i installed: EurekaLog7-Trial.exe / Version 7.7.8.24 RC 24
  • i imported C:\Program Files\FMSoft\Framework\uniGUI\Utils\EurekaLog\uniGUI.eof
  • i set path for Log file in Delphi - Projects / EurekaLOG / Options
  • i set in Delphi - Project / Options: Delphi-Compiler /Compiler / use Debug-dcus (for all configurations)
  • i put a EurekaLogEvents1 on my MainForm ( must i write something in the Events??)

 

if i compile my project - and copy the dll in my "htdoc" folder of apache and start the apache service - my app starts ... but i become no Loggfile ore something else from EurekaLog..

 

If i compile my project - i become successful mesage:

[EurekaLog] Versatile.dproj(1): EurekaLog post-processing (7.7.8.24 RC 24)...
  Versatile.dproj(1): Project compilation was successful.
  Versatile.dproj(1): Post-processing executable
    Versatile.dproj(1): Executing: "C:\Program Files\Neos Eureka S.r.l\EurekaLog 7\Packages\Studio18\ecc32speed.exe" "--el_alter_exe=I:\Win7_mountainoffice\englisch\_Versatile_test_1\Versatile.dproj;I:\Win7_mountainoffice\englisch\_Versatile_test_1\Versatile.dll" --el_gui_error=1315758 --el_nologo --el_mode=Delphi "--el_profile=Release" --el_starttime=43556.4163335995 "--el_outputfilename=I:\Win7_mountainoffice\englisch\_Versatile_test_1\Versatile.dll" --el_outputfilehandle=5452 --el_nostats --el_UnicodeOutput
      Versatile.dproj(1): Loading EurekaLog options...
      Versatile.dproj(1): EurekaLog postprocessor start...
      Versatile.dproj(1): EurekaLog's options were added
      Versatile.dproj(1): EurekaLog's data was added
      Versatile.dproj(1): EurekaLog postprocessor end
    Versatile.dproj(1): Post-processing was successful.
    Versatile.dproj(1): Deleting .map/.tds/.drc files...
  Versatile.dproj(1): EurekaLog's project post-processing completed.

 

I have following SETUP file for EurekaLog

 

[Exception Log]
EurekaLog Version=8000
_CustomProfile=""
Activate=1
atDLL=1
atISAPI=1
boSaveCompressedCopyInCaseOfError=0
boUseMainModuleOptions=0
CompatibilityMode=0
csoCaptureDelphiExceptions=1
DefaultThreadState=1
DeleteMapAfterCompile=1
Dialog Class="TMessageBoxDetailedDialog"
dpDLLExports=0
Encrypt Password=""
HTMLLayout="%U003Chtml%U003E\r\n  %U003Chead%U003E\r\n    %U003C%%content_type%%%U003E\r\n    %U003Cmeta http-equiv=\qcontent-style-type\q content=\qtext/css\q /%U003E\r\n    %U003Ctitle%U003E%U003C%%TITLE%%%U003E%U003C/title%U003E\r\n  %U003C/head%U003E\r\n  %U003Cbody%U003E\r\n    %U003Ch1%U003EInternal Application Error%U003C/h1%U003E\r\n    %U003Cp%U003E%U003C%%EXCEPTION_MESSAGE%%%U003E%U003C/p%U003E\r\n    %U003Cp%U003E%U003Chr width=\q100%%\q%U003E\r\n    %U003Cp%U003EThe exception details were saved to log file. Contact site administrator.%U003C/p%U003E\r\n  %U003C/body%U003E\r\n%U003C/html%U003E"
InjectInfo=1
InjectOptions=1
loAddComputerNameInLogFileName=1
loAddDateInLogFileName=1
loCatchLeaks=0
loCatchLeaksExceptions=0
loEmptyFreedMemory=1
Mandatory e-mail=0
Output Path="C:\\VersatileServer\\htdocs\\Bugging\\"
ProjectID="{C4AD2BEA-0074-4DE3-AB95-7F038AD38C26}"
SlowAndSafe=1
sndAddComputerNameInFileName=0
sndBugZillaAppendText=0
sndBugZillaLogin="your-account"
sndBugZillaUseEMail=0
sndFogBugzAppendText=0
sndFogBugzLogin="your-account"
sndFTPLogin="your-account"
sndJIRAAppendText=0
sndJIRALogin="your-account"
sndMantisAppendText=0
sndMantisLogin="your-account"
sndMantisUseWSDL=1
sndMAPITarget="your-email@example.com"
sndScreenshot=0
sndSendInSeparatedThread=0
sndShellRecepient="your-email@example.com"
sndShowFailureMsg=0
sndShowSendDialog=0
sndShowSuccessMsg=0
sndSMAPITarget="your-email@example.com"
sndSMTPClientFrom="your-email@example.com"
sndSMTPClientLogin="your-account"
sndSMTPClientTarget="your-email@example.com"
sndSMTPServerFrom="your-email@example.com"
sndSMTPServerTarget="your-email@example.com"
sndTimeout=60000
soAppCompilationDate=0
soAppName=0
soAppParameters=0
soAppStartDate=0
soAppUpTime=0
soAppVersionNumber=0
soCustomData=0
soExcCount=0
soExcDate=0
soExcModuleName=0
soExcModuleVersion=0

Link to comment
Share on other sites

I'm using unigui logs event.

UniSession.Log();  or  UniServerModule.Logger.AddLog();

In your app, In first line of create, show, active etc form's events so you can find problem is where. Then add try except  block like
 

Try
  I:=1;
  anycommand but only one command or procedure/function
  I:=2;
except
   UniSession.Log('Unitname.procedurename has exception and I value is ' + I.ToString);
end;
UniSession.Log('Unitname.procedurename finished and I value is ' + I.ToString);

If see in log file, I value is 1 problem in "anycommand" line, so focus there.

One more trick, allways check variable before create or free. I mean, "If not Assigned(...)then..." or If ....<>nil then ..."  etc.

Link to comment
Share on other sites

Hi Freeman..

 

thanX for your help .. i use allso unisession.log . but this is not enouth ;-)

the Log says there is a problem - but i dont find the reason or the position in code ...

i think - EurekaLog7 is the right tool - but i can´t get it to work :-(

ThanX

erich

 

Link to comment
Share on other sites

1 hour ago, erich.wanker said:

i think - EurekaLog7 is the right tool - but i can´t get it to work :-(

Yes you right. And you wrote, eurekalog not work, so I wrote my idea :)  Best way is always known way ;)

On my app usually see, if exception created on app run, db or some queries try open. this mean they are Active property is true on design time. For this issue I'm using gexperts tool.

For second error, need follow create & show events of form's. some time haveto use onform ready or before/after show event.

regards

  • Like 1
Link to comment
Share on other sites

hi Freeman35 ..

ThanX for your help !! 

Just a litte explaning what and why the Error-Finding it´s so horrible ;-)

 

My problem is - the original sourcecode is a Delphi 7 Application - 10 years old - 160 Forms - and a lot of 3rd part components (LMDTools , wollToWoll Grid..)

i translatet all components with a small Programm ...  :-)  !!!!!   (stringreplace .. search "TLabel" -> make TuniLabe ... and so on)

the project works with 60% ..

BUT sometimes (report printing stuff..) i become errors - what i dont find ...

 

I will try to get the EurekaLog7 -Thing to work :-)

Nice greetings

Erich

Link to comment
Share on other sites

2 hours ago, Tokay said:

I recomend to replace component with GExperts. It could help with replacing.

http://www.gexperts.org/tour/

I quickly and simply translate about 100 forms to UniGUI from VCL.

Interesting.  I use GExperts nearly daily, though mostly the grep search.  I've known about the component translation abilities but it's always put me off that you'd have to manually do this, but seemingly I'm wrong?  Are you saying you could set up definitions to automatically translate components in a reproducible fashion?  (If so how? Any examples?)

Link to comment
Share on other sites

2 hours ago, erich.wanker said:

My problem is - the original sourcecode is a Delphi 7 Application - 10 years old - 160 Forms - and a lot of 3rd part components (LMDTools , wollToWoll Grid..)

i translatet all components with a small Programm ...  :-)  !!!!!   (stringreplace .. search "TLabel" -> make TuniLabe ... and so on)

the project works with 60% ..

BUT sometimes (report printing stuff..) i become errors - what i dont find ...

 

I will try to get the EurekaLog7 -Thing to work :-)

Nice greetings

Erich

OK, you have to be very careful with the Ansi -> Unicode changeover.  With D7, strings equated to Ansi strings (8-bit characters) and so D7 era code sometimes makes assumptions about buffer sizes, strings and the size of a Char and a PChar which may not be true anymore.  Because in modern delphi Char = WideChar and hence it can happen that a buffer (allocated in bytes) is perhaps now too small to hold what is actually a widechar buffer/string etc, leading to buffer overflows and access violations.

You need to review the code for use of Char, PChar, and strings and change the code to be explicit if you want to continue using Ansi strings, .e.g change the code to PAnsiChar and AnsiChar respectively.  Or you must migrate the code to account for the new unicode semantics.

Aside: We use madExcept, which is a competitor of Eurekalog.  Maybe you'll find it easier to use.  (Maybe not.)

One other comment: There's quite a few leak and memory checking options in FastMM, including heap corruption checks.  The latter might help you track down buffer overflows and such.  (Heap checking can make apps really slow though, so needs to be carefully employed.)

For more see: https://wiert.me/2009/07/29/delphi-fastmm-using-fastmm4-for-debugging-your-memory-allocations-part-1-introduction/

Edit: I've stumbled over this, which should help you: https://eurekalog.blogspot.com/2009/05/access-violation-in-details_12.html

:)

Link to comment
Share on other sites

17 hours ago, wprins said:

Interesting.  I use GExperts nearly daily, though mostly the grep search.  I've known about the component translation abilities but it's always put me off that you'd have to manually do this, but seemingly I'm wrong?  Are you saying you could set up definitions to automatically translate components in a reproducible fashion?  (If so how? Any examples?)

Here is better link:

http://www.gexperts.org/tour/replace_components.html

I open VCL form in the UniGUI app and manually change all components to the UniGUI components. It's not fully automatically, but it's help a lot.

Link to comment
Share on other sites

if someone needs this .. just for playing around... :-)

 

 

 Memo1.text := StringReplace(Memo1.text, 'TLMDSimpleLabel', 'TUniLabel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDGroupBox','TUniGroupBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TAdvPageControl', 'TUniPageControl', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TAdvTabSheet', 'TUniTabSheet', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDFormDisplay', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);


    Memo1.text := StringReplace(Memo1.text, 'TLMDCheckBox', 'TUniCheckBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLDMComboBox', 'TUniComboBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDSimplePanel', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDFill', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDStarter', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDSysInfo', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TXPManifest', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDGroupBox', 'TUniGroupBox', [rfReplaceAll, rfIgnoreCase]);


    Memo1.text := StringReplace(Memo1.text, 'TOpenDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TOpenPictureDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TMenuItem', 'TUniMenuItems', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSaveDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TZipMaste', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TJvComputerInfoEx', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TwwDBGrid', 'TuniDBGrid', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TWebBrowser', 'TUniURLFrame', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TJvBrowseForFolderDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]);

    Memo1.text := StringReplace(Memo1.text, 'TLMDBitmapList', 'TUniImageList', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDSpeedButton', 'TUniBitBtn', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDLabel', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TJVLabel', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLMDDirDlg', '{manual_work}', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TPaintBox', 'TUniCanvas', [rfReplaceAll, rfIgnoreCase]);

    Memo1.text := StringReplace(Memo1.text, 'class(TForm)', 'class(TUniForm)', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'class(TFrame)', 'class(TUniFrame)', [rfReplaceAll, rfIgnoreCase]);

    Memo1.text := StringReplace(Memo1.text, 'TBitBtn', 'TUniBitBtn', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TButton', 'TUniButton', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TCalendar', 'TUniCalendar', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TCalendarDialog', 'TUniCalendarDialog', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TCalendarPanel', 'TUniCalendarPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TCanvas', 'TUniCanvas', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TChart', 'TUniChart', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TCheckBox', 'TUniCheckBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TComboBox', 'TUniComboBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TColorButton', 'TUniColorButton', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TColorPalette', 'TUniColorPalette', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TContainerPanel', 'TUniContainerPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDateTimePicker', 'TUniDateTimePicker', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBCheckBox', 'TUniDBCheckBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBComboBox', 'TUniDBComboBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBDateTimePicker', 'TUniDBDateTimePicker', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBEdit', 'TUniDBEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBFormattedNumberEdit', 'TUniDBFormattedNumberEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBGrid', 'TUniDBGrid', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBHTMLMemo', 'TUniDBHTMLMemo', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBImage', 'TUniDBImage', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBListBox', 'TUniDBListBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBLookupComboBox', 'TUniDBLookupComboBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBLookupListBox', 'TUniDBLookupListBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBMemo', 'TUniDBMemo', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBNavigator', 'TUniDBNavigator', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBNumberEdit', 'TUniDBNumberEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBRadioGroup', 'TUniDBRadioGroup', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TDBText', 'TUniDBText', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TEdit', 'TUniEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TFieldSet', 'TUniFieldSet', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TFileUpload', 'TUniFileUpload', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TFormattedNumberEdit', 'TUniFormattedNumberEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TGenericControl', 'TUniGenericControl', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TGroupBox', 'TUniGroupBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'THiddenPanel', 'TUniHiddenPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'THTMLFrame', 'TUniHTMLFrame', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'THTMLMemo', 'TUniHTMLMemo', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TImage', 'TUniImage', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TImageList', 'TUniImageList', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TLabel', 'TUniLabel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TListBox', 'TUniListBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TMemo', 'TUniMemo', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TMenuButton', 'TUniMenuButton', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TNativeImageList', 'TUNINativeImageList', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TMainMenu', 'TUniMainMenu', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TNumberEdit', 'TUniNumberEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TPageControl', 'TUniPageControl', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TPanel', 'TUniPanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TPopupMenu', 'TUniPopupMenu', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TProgressBar', 'TUniProgressBar', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TRadioButton', 'TUniRadioButton', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TRadioGroup', 'TUniRadioGroup', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TScreenMask', 'TUniScreenMask', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TScrollBox', 'TUniScrollBox', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSimplePanel', 'TUniSimplePanel', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSpeedButton', 'TUniSpeedButton', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSpinEdit', 'TUniSpinEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSplitter', 'TUniSplitter', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TStatusBar', 'TUniStatusBar', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TStringGrid', 'TUniStringGrid', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TSyntaxEdit', 'TUniSyntaxEdit', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TTabControl', 'TUniTabControl', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TThreadTimer', 'TUniThreadTimer', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TTimer', 'TUniTimer', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TToolBar', 'TUniToolBar', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TTrackBar', 'TUniTrackBar', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TTreeView', 'TUniTreeView', [rfReplaceAll, rfIgnoreCase]);
    Memo1.text := StringReplace(Memo1.text, 'TURLFrame', 'TUniURLFrame', [rfReplaceAll, rfIgnoreCase]);

  • Like 1
Link to comment
Share on other sites

Hi,

If I were you, I use gexperts and change one by one. Because, event name can change, create order change. Gexperts tool has a settings too. how to use, right click on component, and click "Replace components..."

https://svn.code.sf.net/p/gexperts/code/trunk

I'm using svn version. It has a build commandline script.

https://blog.dummzeuch.de/gexperts-documentation/compiling-gexperts/

 

Ekran Resmi 2019-04-02 16.35.25.png

Link to comment
Share on other sites

Back to the AV tracking topic, I later remembered about "SafeMM" (https://stackoverflow.com/questions/1039646/trying-to-locate-safemm-for-delphi, probably the best link seems to be http://cc.embarcadero.com/item/28681) which you may also be interested in maybe trying, and then found the following question on StackOverflow with references to several other relevant projects:

https://stackoverflow.com/questions/17164155/delphi-tools-technics-for-tracking-propagated-access-violation

Hope that helps.

Edit: aaaand then on Eurekalog's site again:https://eurekalog.blogspot.com/2010/03/memory-problems-in-delphi-apps-final_30.html

Link to comment
Share on other sites

  • 1 year later...
On 3/29/2019 at 6:20 AM, erich.wanker said:

Hi ..

now - i am searching 2 days to find the errors...

What is the best way to find a EAccessViolation ?? 

  • The 1st. error comes by starting my project ..
  • the 2.nd error comes if i showmodal a simple UniForm

1.) Versatile.dll: 000036F0: 10:11:07 [Zugriffsverletzung bei Adresse 47CC2612 in Modul 'Versatile.dll'. Lesen von Adresse 00000648-::1]:EAccessViolation : Zugriffsverletzung bei Adresse 47CC2612 in Modul 'Versatile.dll'. Lesen von Adresse 00000648 : Addr: $47CC2612
2.) Versatile.dll: 00003148: 10:11:10 [::1]:EAccessViolation : Zugriffsverletzung bei Adresse 47CDFA61 in Modul 'Versatile.dll'. Schreiben von Adresse 00000000 : Addr: $47CDFA61

 

I user Win10 (32Bit) - Delphi XE4 .. Firebird sql Server 2.5 (zeos Lib) 

 

ThanX

Erich

Were you able to configure this version of eurekalog on unigui?

Link to comment
Share on other sites

  • 1 year later...
On 5/31/2020 at 11:45 AM, Mehmet Emin said:

Hello @picyka

madExcept also works with uniGUI and will show you the exact location of your exception.

Install madExcept eval and just add this few lines to your server module.

 

 

Could you give me the correct way to use madExcept I would like to test it, what do you need to configure?

Thanks

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...