Delphi DLL Debugging Hjælp
Hjælp og vejledning i, hvordan man fejlretter fejl i DLL'er ved hjælp af Delphi 4, 5, 6, 7, 2005, 2006, 2007, 2010, XE - XE10 og C++ Builder / Borland Developer Studio (BDS), CodeGear Developer Studio (CDS) og Embarcadero RAD studie
BPG-filer - Undgå, når du vil fejlfinde DLL'er
Selvom du markerer/vælger det DLL-projekt, du vil fejlsøge på listen over projekter, vil du stadig have problemer, hvis følgende forhold er til stede:
- Dit DLL-projekt bruger relative søgestier. (Indstil i projektindstillinger.)
- Et eksempel med relative projektsøgestier og Delphi IDE:
- Brug den åbne dialog til at åbne en fil i samme mappe som projektfilen.
- Du kan åbne projektfiler placeret i f.eks. "..shared" i kodeeditoren ved at bruge "CTRL + ENTER".
- Prøv at åbne en fil i en anden mappe. Du kan ikke længere åbne filer i "..delt".
- Jean-Claude Servaye foreslår følgende løsning:
- Gå til panelet Kontrolpanel - System - Avanceret.
- Klik på Miljøvariabler.
- Tilføj den absolutte sti til dll'en for at fejlsøge i systemstierne.
- Genstart maskinen.
- Dit DLL-projekt er i en anden mappe end de andre projekter (muligvis bare hvis det er forskelligt fra sidste projekt på listen).
Fejlretningsoplysninger - kompilér og byg altid med alle aktiveret
- Du skal aktivere alle relevante indstillinger i "Projekt - Indstillinger - Compiler".
- Hver gang du forsøger at foretage fejlretning fra et projekt til et andet, skal ind-projektet have indstillet Projekt - Indstillinger - Linker - Inkluder fjernfejlfindingssymboler.
Sådan fejlretter du - Værts applikation og vedhæft til proces
- Hvis du vil fejlsøge både din DLL og eksekverbare (hvis kun DLL-filen, ignorer dette), skal du også konfigurere din eksekverbare med fjernfejlfindingssymboler som nævnt i afsnittet ovenfor. I DLL-projektet skal du vælge Kør - Parametre - Værtsapplikation og udfylde stien til den kompilerede .exe-fil. Når exe-applikationen kører, skal du vælge (fra DLL-projektet) Kør - Vedhæft til proces og vælge din kørende exe-programproces.
- Indstil et breakpoint i DLL-projektet, hvor exe'en skal indtaste din DLL. Start nu de nødvendige handlinger i exe'en for at det kan ske.
- Se hjælpen for flere brugsvarianter.
Byg projekt før kørsel og fejlretning
Dette mindsker chancen for, at Delphi siger (mens man f.eks. går fra et breakpoint): Kilden er ændret siden sidste build.
Blå prikker vises forkerte steder, når du bygger
Selvom dette kan være forårsaget af andre ting (i det mindste efter min erfaring), synes en primær årsag at være et CR/LF-problem, der eksisterer i Delphi: IDE og compiler er uenige om end-of-line. For Windows/Linux/Max betyder det, at tekst/filer skrevet i et OS kan forårsage problemer i et andet. Så hvis du bruger Windows og lider af ovenstående problem, så prøv at bruge f.eks. NotePad til at åbne og gemme den problematiske fil med.
Vedhæft til projekt- og multitrådsapplikationer
Det kan ofte være nyttigt at knytte sig til et igangværende projekt for at se, hvad de forskellige tråde arbejder med. Det er dog kedeligt at sætte et brudpunkt alle mulige steder. Her er løsningen:
- Vælg "Kør - Vedhæft for at behandle og vælg din ansøgning.
- Vælg "Kør - Program pauser
- Vælg "Vis - Fejlfindingsvinduer - Opkaldsstak og se de forskellige trådopkaldsstakke.
COM DLL-programmering - Stier er vigtige
Selvom dette kan være forårsaget af andre ting (i det mindste efter min erfaring), synes en primær årsag at være et CR/LF-problem, der eksisterer i Delphi: IDE og compiler er uenige om end-of-line. For Windows/Linux/Max betyder det, at tekst/filer skrevet i et OS kan forårsage problemer i et andet. Så hvis du bruger Windows og lider af ovenstående problem, så prøv at bruge f.eks. NotePad til at åbne og gemme den problematiske fil med.
Husk ".dll" filudvidelse i grænsefladeerklæringer
Mange mennesker støder på problemer med COM-fejlretning, når filstien ikke er i 8.3-format: Ingen mellemrum eller lange filnavne i stien. Et sådant problem er at indstille brudpunkter i kode.
Jean-Claude Servaye sendte følgende løsning:
- Søg i registreringsdatabasen efter filstien til COM. Dette er i 8.3-format.
- Skift det til det lange filnavnsformat, og brudpunkterne er tilgængelige.
Husk tilpasningsproblemer, når du sender data
Selvom nogle Windows-versioner kan klare at udelade udvidelsen, er det mere sikkert at inkludere den, f.eks. sådan: procedure Foo external 'example.dll'
Tråde - jo mindre jo nemmere at fejlfinde
Hvis det er muligt, skal du oprette et flag, der forhindrer flere tråde i at oprette forbindelse til din DLL; Dette gør det lettere at fejlfinde logikken i koden inde fra Delphi IDE.
Adgangsovertrædelser, fejl, undtagelser og hukommelseslækager
Som med alt andet er det stadig muligt at lave og have pointerfejl osv. Her er en liste over diverse links og værktøjer til at løse almindelige problemer og årsager:
- Adgangsovertrædelser, undtagelser, hukommelseslækager: Du bør nok tjekke hukommelseslækagedetektionsværktøjer såsom MemCheck (kompileret kilde)
Sidste løsning - Søg og spørg i diskussionsgrupper
Denne side var aldrig ment som en komplet guide om Delphi DLL-filfejlfinding. Jeg oprettede oprindeligt denne side, fordi det, der hjalp mig, ved at vide, hvordan BPG-filer håndteres, er noget, ingen nogensinde har nævnt i de forskellige diskussionsgrupper (sandsynligvis fordi mit problem var ret sjældent at støde på). Gode steder at finde svar omfatter:
Epilog - Da jeg oplevede mit "DLL-helvede"
Produktet, som jeg ønskede flere DLL'er / plugins til og til en applikation, var
Automation Batch Tools, som kommer med en DLL plugin SDK til udviklere. Mens udtrykket DLL-helvede normalt refererer til problemer forbundet med et visuelt RAD-udviklingsværktøj (ikke
Delphi ), tør jeg godt sige, at jeg har gennemgået min mængde af DLL-helvede.
Microsys |
artikler |
forrige |
Næste Microsys udvikler desktop-software, mobile apps og hjemmesider. Vi tilbyder også forskellige tjenester til andre relaterede områder, herunder SEO-optimering.
Denne artikel er skrevet af
Thomas Schulz Som en af de ledende udviklere har hans hænder rørt det meste af koden i softwaren fra Microsys. Hvis du e-mailer spørgsmål, er chancerne for, at han vil være den, der svarer.