AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsame Fehler in Delphi

Ein Thema von oXmoX · begonnen am 24. Jun 2005 · letzter Beitrag vom 16. Jul 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#1

Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 12:43
Hallo,

das hier wird jetzt länger ...geht aber nicht anders.

Ich habe nun schon seit über zwei Wochen Tag für Tag mit "seltsamen" Fehlern in meinem Delphi-Programm zu kämpfen. Bei dem Programm handelt es sich um eine Applikation im Bereich Computer Vision, die zum Personen Tracking mit Hilfe von zwei Kameras gedacht ist. Dabei kommen zwei externe Bibliotheken zum Einsatz: DSPack 2.3.4., um mittels Direct Show auf die beiden Kameras zuzugreifen und OpenCV Beta 4, eine OpenSource-Bibliothek - geschrieben in C - die mir diverse Algorithmen zur Bildverarbeitung bereitstellt.

Mit "seltsamen" Fehlern meine ich z.B. folgendes:
  • 1) Ich vertausche zwei Zeilen im Quellcode und plötzlich verschwindet irgendwo in einem TMainMenu ein Eintrag. Anstelle des Eintrags wird nur ein leeres Feld gezeichnet.
  • 2) Ich Rufe eine OpenCV-Routine zur Detektion von Punkten auf einem Schachbrett auf, doch es werden keine Punkte gefunden. Darauf entferne ich an ganz anderer Stelle im Programm einen TButton oder ein TPanel von der GUI und auf einmal kann die OpenCV-Routine alle Punkte finden ...im selben Bild! Der TButton bzw. das TPanel hat jedoch mit Sicherheit nichts mit dieser Funktion zu tun.
Ich könnte jetzt noch andere Fehler nennen. Das lasse ich aber, weil ich dazu weiter ausholen müsste und alle Fehler einen ähnlichen Charakter, wie die beiden obigen haben.

Im allgemeinen habe ich festgestellt: sobald ich mein Programm etwas schlanker mache, verschwinden die "seltsamen" Fehler und das Programm verhält sich wieder ordnungsgemäß. In 2) reichte schon das Entfernen eines GUI-Elements dazu aus. Manchmal reicht es auch, irgendein Form aus dem Projekt zu entfernen (welches nie aufgerufen wird).

Dieses Verhalten macht die Sache für mich sehr kompliziert. Ich bin nicht in der Lage, den Fehler zu extrahieren, d.h. das Programm soweit herunerzu-"schlanken" dass es in ein Forum passt. Desshalb kann ich hier nur allgemeine Hinweise zum Programm geben und hoffen, dass mir jemand zumindest eine grobe Richtung für die Fehlersuch weisen kann.

Hier also Infos, die evtl. wichtig sein könnten:
  • Ich arbeite an vielen Stellen mit Pointern. Das muss ich tun, weil die OpenCV-Bibliothek sehr oft Pointer als Argument entgegennimmt. Z.B. werden statt Arrays dort grundsätzlich Pointer gefordert, die dann einen entsprechenden Speicherbereich allokiert haben müssen. Tatsächlich habe ich anfangs einen Fehler bei der Allokierung / Deallokierung von Speicher dabei gemacht. Durch Korrektur konnte ich den Fehler 1) beheben. Ich dachte zunächst, dass das Problem damit behoben wäre. Als ich dem Programm aber neue Funktionalität hinzufügte, tauchten die Fehler (u.a. Fehler 2) wieder auf. Ich glaube allerdings nicht, dass ich noch Fehler bei der Speicherreservierung/-freigabe habe. Könnte es dennoch damit zusammenhängen?
  • Ich verwende an einer Stelle einen Parallelen Prozess in form eines Timers. Dieser ist allerdings noch nicht aktiv, wenn die Fehler auftauchen.
  • Ich arbeite mit Delphi 7.0 (also kein Update bisher).
  • Die Code-Optimierung des Compilers ist ausgeschaltet. Die Fehler tauchen genauso auf, denn ich die Exe außßerhalb der IDE ausführe.
  • Die meisten Fehler sind auch auf anderen Systemen reproduzierbar. Mein eigener Rechner verwendet WinXP SP2. Ich hab die Fehler aber auch schon auf einem Win 2000 (selbe Delphi-Version) reproduzieren können.
  • Vor gut zwei Wochen habe ich die DSPack-Bibliothek mal so weit wie möglich durch eine andere ersetzt. Das Problem bestand immernoch, wesshalb ich jetzt wieder DSPack verwende. Müsste ich tatsächlich auf DSPack verzichten, so würde mich das zeitlich weit zurückwerfen.
  • Wichtig ist es mir auch nochmal darauf hinzuweisen, dass die Fehler verschwinden, wenn ich das Programm kleiner mache. Jenachdem reicht schon das Löschen von ein paar (unwichtigen) Zeilen im Sourcecode.

Bin mal gespannt, was jetzt für Hinweise kommen. Bin total verzweifelt (und das ist noch untertrieben) und habe nach so langer Zeit wirklich kaum noch Lust auf Fehlersuche.

Gruß,
oXmoX
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 12:53
Hi oXmoX,

ich kenne das Gefühl.

Vielleicht überschreiben dir DSPACK-Routinen Teile deines Programms, weil du irgendwo Zeigervariablen übergibst, wo du Zeiger auf Zeigervariablen hättest übergeben müssen - eine beliebte Fehlerquelle beim Verbinden von Delphi-Programmen mit C-DLLs, vor der auch Profis nicht gefeit sind.

Grüße vom marabu
  Mit Zitat antworten Zitat
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#3

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 12:56
Zitat von marabu:
Vielleicht überschreiben dir DSPACK-Routinen Teile deines Programms, weil du irgendwo Zeigervariablen übergibst, wo du Zeiger auf Zeigervariablen hättest übergeben müssen
Einige Funktionen verlangen tatsächlich Zeiger auf Zeiger. Ich denke, dass ich die entsprechenden Parameter dort aber auch richtig übergebe. Werd's trotzdem mal nachprüfen.

Danke für den Tip.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#4

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 13:06
Moin, moin,

also zunächstmal dürfen keine DCU´s gleichen Namens im Suchpfad sein Zwischendurch am besten mal alle löschen.
Sonst hört sich das doch nach einem Pointerproblem an. Würde mal folgendes Probieren. Kopiere Dir Dein Projekt
und füge der Kopie zum größer machen mal eine Riensgrafik (Bild) im Programm ein.
Und jetzt nimm kritisches Formular für Formular aus dem Projekt. Pointer und Create/Destroy-Probleme zu finden
ist keine einfache Geschichte...

Grüße /// Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 13:31
Moin Oxmox,

ich würde es mal mit MemProof bzw. MemChk versuchen.
Vielleicht lässt sich damit die Ursache finden, bzw. einkreisen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#6

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 13:32
Danke für den Tip mschaefer!
Werd mal ein wenig herumbasteln.

Grad eben habe ich das Start-Form durch ein neues ersetzt. Daraufhin war der Fehler natürlich weg. Als ich wieder auf das ursprüngliche Startformular geschaltet habe tauchte der Fehler auch nicht mehr auf. Auf einmal lief alles einwandfrei ...bis ich dann das Formular um einen sinnlosen Button erweitert habe. Da war der Fehler dann wieder da.

Ein weitere Workaround bringt mich hier nicht weiter ...diesem Fehler habe ich jedenfalls den Krieg erklärt . Stellt euch mal vor, ihr würdet nun schon 2 Wochen lang erfolglos versuchen soeinem Fehler auf die Spur zu kommen. Ich schätze ich hab's nicht mehr weit bis zum Irrenhaus.

...naja, keine Sorge: noch gehts mir gut

Gruß,
oXmoX
  Mit Zitat antworten Zitat
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#7

Re: Seltsame Fehler in Delphi

  Alt 24. Jun 2005, 21:14
Zitat von Christian Seehase:
ich würde es mal mit MemProof bzw. MemChk versuchen.
MemProof ist mir schonmal eine große Hilfe ...da findet man ja doch noch so einiges. Kein Wunder bei der Komplexität, die das Proframm mittlerweile erreicht hat. Ich meld mich wieder, wenn mein Heap sauber ist (wird bestimmt noch was dauern). Mit etwas Glück bekomme ich den Fehler wirklich so weg.

Gruß,
oXmoX
  Mit Zitat antworten Zitat
orabimus
(Gast)

n/a Beiträge
 
#8

Re: Seltsame Fehler in Delphi

  Alt 25. Jun 2005, 12:25
Bei mir half es schon einmal, die Reihenfolge der unter uses ... eingebundenen Units zu ändern.

mfg
  Mit Zitat antworten Zitat
oXmoX

Registriert seit: 8. Jun 2005
85 Beiträge
 
#9

Re: Seltsame Fehler in Delphi

  Alt 27. Jun 2005, 17:40
Dann hätte ich gleich mal noch eine Frage zum Thema Speicherbereinigung. Wie mache ich das denn bei Interfaces? Z.B. erstelle ich irgendwo ein IXMLDocument mit
Code:
MyXmlDoc := NewXMLDocument;
Dann habe ich über das Interface eine Referenz auf ein neu erstelltes Objekt. Muss ich mich da etwa auch um die Wieder-Freigabe kümmern? Die Methode _Realease bringt irgendwie nicht den gewünschten Effekt (sag zumindest MemProof).
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Seltsame Fehler in Delphi

  Alt 27. Jun 2005, 18:18
Ich würde erwarten, dass der folgende Code keine memory leaks hinterlässt:

Delphi-Quellcode:
uses
  MSXML2;
var
  doc: IXMLDOMDocument;
begin
  // OleInitialize(nil);
  doc := CoDomDocument.Create;
  doc := nil;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz