![]() |
Debugging in der IDE
Hi,
habe seit Jahren nicht mehr unter Windows programmiert, sondern Linux mit Python, Perl, Java, ... etc. Aktuelle Projekte sind unter Windows (XP/7) und Delphi XE. 1. Gibt es in der Delphi IDE ein Debug-Fenster, etwa so wie in in MS Visual Studio: Debug.WriteLine('Hello World'); ... momentan lass ich das alles über ein Memo bzw. ShowMessage(...); ausgeben. 2. Ist es möglich, das mir die IDE so 'unspezifische' Fehler wie "unerlaubt Zugriffe", "Speicherverletzungen", ... mit der Zeile anzeigen in der sie passieren ? ^^ Wollte letzte Woche auf ein Element einer eines deklariertes Arrays zugreifen. Fehler war, dass das Array leer war. Im 'Debug-Modus' (grüner Pfeil mit den roten Quadrat), wird ja nur der ASM-Code angezeigt ?! Weniger IDE-related: 4. Wie finde ich heraus, zu welcher Funktion welches "Modul/Unit" (??) gehört: ShellExecute >> ShellApi Now >> DateUtils; Machmal sagt schon die IDE, "unbezeichnete Methode" o.ä. ... dann drücke ich F1 und die Hilfe zeigt mir das Modul an. Heute morgen mit ShellExecute nicht ?! ^ Habe gerade das Hilfe Update installiert ggf. passt es dann. 5. Für Oracle DB-Anbindung benutze ich OraTools.
Delphi-Quellcode:
... wenn nun meine kompilierte Anwendung den Fokus verliert und/oder ein anderes Fenster darüberliegt - anschließend mein Delphi Anwendung wieder Fokus bekommt wird dieses nicht mehr gerendert. Brauche ich hier mehrere Threads (wie Linux/Gnome) ? >> GUI-Thread und Thread für meinen Code ?
...
myQuery := TOraQuery.Create(nil); myQuery.Session := OraSession1; myQuery.SQL.Add('SELECT somekey FROM sometable WHERE ... '); myQuery.Open; for I := 0 to myQuery.RecordCount-1 do begin { Do something !} myQuery.Next; end; ... Tips sind willkommen :-) Grüße und besten Dank Florian |
AW: Debugging in der IDE
1)
![]() 4) Das mache ich auch immer durch "In die Hilfe/Google/DP schauen". Theoretisch sollte das über das Refactoring gehen... 5) Entweder mit Application.Processmessages die Warteschlange abarbeiten und damit das Neuzeichnen erlauben, oder eben wie du selbst gesagt hast Threads (sauberer) |
AW: Debugging in der IDE
Welche Delphi-Version nutzt du denn? (sowar könnte man eventuell auch gleich in seinem Forenprofil erwähnen)
[edit] XE > hatte ich über sehn :oops: 4) Halte mal die Maus über das Gewünschte und warte ein Sekündchen. Ansonsten wäre eben die OH der erste Ansprechpartner. Sobald man die VCL-Quellcodes besitzt (ab den Professionals, wenn sie installiert wurden), kann man auch Strg+Linksklick auf das wort machen und landet dort, wo es deklariert wurde. 2) Bezüglich der Arrays > Projektoptionen, dort nach sowas "Indexprüfung" suchen und dieses aktivieren. <code> = falsch (könntest'e ja noch schnell entsprechend editieren) [code] = richtig (BB-Codes und kein HTML-Zeugs) [delphi] = besser (der Button mit dem roten Helm) Zitat:
Da hast du also einen Fehler in der Darstellung, dein Programm ist verreckt oder sonstwas. Was wird denn nicht gerendert? (normale Kompoenten ala TEdit oder eventuell was selbsgemaltet) Reagiert das Programm denn ansonsten? (abgersehn von der Darstellung) |
AW: Debugging in der IDE
vielen Dank für eure Antworten soweit.
Zu Punkt 5. habe gerade mit einer in Delphi 7 kompilierten Version Screenshots gemacht :-( ... die Delphi XE Anwendungen unter Win XP sehen nicht besser aus und der Fokus kommt gar nicht mehr zurück bis die Anwendung beendet ist ! Hardware: Intel i5 (4 Kerne) - 4 GB Ram. Screenshots siehe hier: ![]() (Die ersten 4 Bilder (WinXP, Oracle VirtualBox auf Debian Squeeze) - die letzen 2 (Win 7, real) Die Anwendung läuft eben schon weiter, bis sie sich eben durch alle Datensätze gequält hat. Der Quelltext - gekürzt, nicht schön formatiert:
Delphi-Quellcode:
... begin metaFlag: True; filePath := 'C:\xmlTest\'; xmlDoc := TXMLDocument.Create(nil); xmlDoc.Active := True; myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; SetLength(row, myQuery.RecordCount); for R := 0 to myQuery.RecordCount-1 do begin row[R, 0] := myQuery.FieldByName('key_1').asString; row[R, 1] := myQuery.FieldByName('key_2').asString; row[R, 2] := myQuery.FieldByName('key_3').asString; row[R, 3] := myQuery.FieldByName('key_4').asString; myQuery.next; end; for J := 0 to high(row) do begin for S := 0 to high(saisons) do begin if AktSA <> row[0] then begin if AktSA <> '' then begin writeFlag = True; end; AktSA = row[0]; end; fileName := filePath + row[3] + '_' + AktSA + '.xml'; myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; Form1.Memo1.Lines.Add(sLineBreak); Form1.Memo1.Lines.Add(myQuery.SQL.Text); Form1.Memo1.Lines.Add(IntToStr(myQuery.RecordCount) + ' Ergebnisse'); feingehalt := myQuery.FieldByName('somekey_1').AsString; bf_kuerzel := myQuery.FieldByName('somekey_2').AsString; ul_alphaCode := myQuery.FieldByName('somekey_3').AsString; myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; if metaFlag = True then begin root := xmlDoc.AddChild('ImportData'); metaNode := root.AddChild('MetaData'); metaNode.Attributes['foo'] := AktSA; { and some more } end; myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; SetLength(ad_exp_ekr_gd_groesse, myQuery.RecordCount); for I := 0 to myQuery.RecordCount-1 do begin { add to xmlDoc } myQuery.Next; end; {ItemPlanning} ItemPlanning := item.AddChild('somechild'); myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; Form1.Memo1.Lines.Add(sLineBreak); Form1.Memo1.Lines.Add(myQuery.SQL.Text); Form1.Memo1.Lines.Add(IntToStr(myQuery.RecordCount) + ' Ergebnisse'); SetLength(country_category, myQuery.RecordCount); for I := 0 to myQuery.RecordCount-1 do begin { add to xmlDoc } myQuery.next; end; myQuery.First; for C := 0 to high(country_category) do begin { add to xmlDoc } myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; Form1.Memo1.Lines.Add(sLineBreak); Form1.Memo1.Lines.Add(myQuery.SQL.Text); Form1.Memo1.Lines.Add(IntToStr(myQuery.RecordCount) + ' Ergebnisse'); for I := 0 to myQuery.RecordCount-1 do begin { add to xmlDoc } myQuery.Next; end; end; myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; AktPr := ''; AktGr := ''; for I := 0 to myQuery.RecordCount-1 do begin { add to xmlDoc } myQuery.Next; end; {DoaAssignment} {ItemI18N} myQuery.SQL.Clear; myQuery.SQL.Add('...'); myQuery.Open; for I := 0 to myQuery.RecordCount-1 do begin { add to xmlDoc } myQuery.Next; end; if writeFlag = True then begin s1 := TStringList.Create; s1.Assign(xmlDoc.XML); s1.Insert(0, '<?xml version="1.0" encoding="utf-8"?>'); s1.SaveToFile(fileName); writeFlag = False; metaFlag = True; end; end; end; end; end. |
AW: Debugging in der IDE
Als aller erstes: Du tust dir selber einen Gefallen, wenn du die Routine in mehrere aufteilst. Faustregel für mich ist immer: Eine Routine, eine Aufgabe.
Dass sich dein Fenster nicht mehr neu zeichnet ist doch logisch. Wann soll denn der Code zum Neuzeichnen ausgeführt werden, wenn der Prozess die ganze Zeit mit der Datenbank beschäftigt ist? Es wird also kein Weg um Threads herumführen, wenn man es sauber implementieren will. Und bitte stelle pro Beitrag immer nur eine Frage. Es fängt jetzt schon an hier munter durcheinander zu gehen und der Beitragstitel hat auch nichts wirklich mit deinen Fragen zu tun. Was soll ich als Moderator jetzt machen? |
AW: Debugging in der IDE
Ach so, du führst also eine "langandauernde" Aktion aus (klang irgendwie anders) und wenn wärenddessen die Form neu gezeichnet werden müsste, dann passiert das nicht (bis die Aktion fertig ist).
Wie Luckie schon sagte: - Threads - oder in angemessenen Abständen ![]() (z.B. alle 50 bis 500 Millisekunden, aber nicht zu oft, da es eventuell extrem ausbremsen könnte) Bei weiteren Fragen zu diesem Punkt aber auf jeden Fall einen neuen thread aufmachen oder nachsehn, ob die Forensuche nicht sogar (ganz bestimmt sogar) etwas findet. PS: Screenshots besser direkt an den Beitrag anhängen. |
AW: Debugging in der IDE
Zitat:
Zitat:
|
AW: Debugging in der IDE
Zitat:
Sherlock |
AW: Debugging in der IDE
Zitat:
Die anderen kennen die DP nicht. Gruß K-H |
AW: Debugging in der IDE
Das Problem ist, daß zusätzliche Prüfungen den Code schon etwas ausbremsen können (wenn sie sehr oft vorkommen).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz