![]() |
Handling von Fehlern, Warnungen und Hints
Hinweis: Dieser Thread ist eine Abspaltung von
![]() Zitat:
Zitat:
[edit=Phoenix]Thread separiert. Keine Diskussionen im OT bitte. Mfg, Phoenix[/edit] [edit=Phoenix]Aufhänger der Diskussion eingefügt. Mfg, Phoenix[/edit] |
Re: Deine Frage an CodeGEAR
Imho sind Warnungen oder Hinweise keine Fehler.
|
Re: Deine Frage an CodeGEAR
Zitat:
z.B Warnung D2009: Zitat:
|
Re: Handling von Fehlern, Warnungen und Hints
Man kann doch aber bestimmte Warnungen für bestimmte Quellcode Abschnitte deaktivieren ...
Sowas geht zumindest in Delphi 7. Komplett alle Warnungen und Hinweise abzuschalten halte ich für sehr gefährlich. |
Re: Handling von Fehlern, Warnungen und Hints
Nein Warnungen sollten natürlich genau betrachtet werden und geprüft werden, ob ein Eingriff nötig ist. Aber Warnungen zu Fehlern zu machen, nur um den Programmierer zu zwingen, die Stelle noch mal genauer anzusehen, finde ich ist der falsche Weg.
|
Re: Handling von Fehlern, Warnungen und Hints
Das bedeutet, dass bei Delphi 2009 eine Warnung dazu führt, dass der Compiler anhält?
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
|
Re: Handling von Fehlern, Warnungen und Hints
Wenn Du es einschaltest ja.
Diese Option wurde anscheinend sehr oft von den Usern nachgefragt. (u.a. von mir auch mehrfach bei Nick ;-) ). Ich liefere z.B. auch keinen Code aus, der auch nur einen Hinweis enthält. @mkinzler: Wenn viele andere Leute eben auch Qualitätscode abliefern wollen und dieses Feature nachfragen ist der Einbau denke ich nicht der falsche Weg ;-) |
Re: Handling von Fehlern, Warnungen und Hints
Es spricht nichts dagegen, dies als Switch anzubieten, aber als Standard wäre es nicht gut
|
Re: Handling von Fehlern, Warnungen und Hints
Solange es aktivierbar / deaktivierbar ist finde ich die Option völlig in Ordnung.
|
Re: Handling von Fehlern, Warnungen und Hints
Ist es ja. Und die Standard-Einstellungen ist ja auch der bisherige Stand. Nur kann man eben - so man denn will - einschalten dass Warnungen als Fehler behandelt werden. Ich habs an (schon seitdem Andreas das in den DDevExtensions drin hat) und bin happy damit :)
|
Re: Handling von Fehlern, Warnungen und Hints
Wer Hinweise und Warnungen grundsätzlich ignoriert, wird nie ordendliche und robuste Software erstellen. Natürlich kann man einige Warnungen/Hinweise ignorieren, wenn man weiss, was man tut.
@mkinzler: Das, was in Delphi eine Warnung ist ("Funktion liefert u.U. kein Resultat", "Variable ist nicht initialisiert") ist in C# beispielsweise ein Fehler. Und das ist es ja auch! Zwar kein syntaktischer Fehler, aber dafür ein sematischer. Oder kennt einer von Euch ein Einsatzgebiet, in dem so ein Konstrukt Sinn ergibt? Ich habe bei mir alle Warnungen eingeschaltet, ausgenommen die Warnungen für 'Unsicheren Code/Typ/Typumwandlung'. Ich habe es mir zur Angewohnheit gemacht, alle Warnungen und Hinweise in Ordnung zu bringen und empfinde Fremdmodule, die mir die Warnungen nur so um die Ohren hauen, als Laiengeschmier. Meistens (oder eigentlich immer) sind sie es nach genauerem Hinsehen dann auch. |
Re: Handling von Fehlern, Warnungen und Hints
Boah, ich glaube meine Fragen wurden völlig falsch interpretiert.
Ich habe nichts gegen das Warnungssystem! Bei JWSCL habe ich sogar alle "echten" Warnungen korrigiert, so dass nur noch "Text hinter dem end. wird vom Compiler ignoriert" existiert. Der Text, der da genannt wird ist übrigens ein {$ENDIF}. Warum Warnungen ausschalten im Quelltext? Für manche Warnungen oder Hinweise (deprecated, plattformabhängig usw), wäre das wirklich fabelhaft, weil sie eigentlich nur stören und keinen Sinn für die Situation haben. Worauf ich mich beziehe ist das hier : ![]() Zitat:
PS. Sollten Warnungen irgendwann fest als Fehler erkannt werden, dann kann ich schon jetzt vorhersagen, dass es einige Delphientwickler weniger geben wird (und ich bin keiner davon). Aber selbst C++ ist da 100% flexibler. Und so hätte ichs auch gerne für die Warnungen. |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Zitat:
-- |
Re: Handling von Fehlern, Warnungen und Hints
Nein. Aber meine Anwendungen enthalten auch die Unit FileCtrl nicht ;-)
|
Re: Handling von Fehlern, Warnungen und Hints
Na dann, RESCHPEKT! Ich benutze sie des öfteren und die Warnung hatte mich anfangs irritiert. Inzwischen ignoriere ich sie einfach ;-)
Gruß -- |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Zitat:
Zitat:
1. Die "Wir-entwickeln-sicheren-Code"-Fraktion. Bevorzugte Sprachen: z.B. C#, Java oder auch Delphi (wenn Delphi so lange überlebt) 2. Die "Was-soll-der-Mist-ich-bin-der-Herr-über-meinen-Code"-Fraktion Ent(fr/w)ickelt wird in C, C++ und anderen Verdächtigen und die sind dann weiterhin für die vielen Bufferoverflows und schlechten Programme verantwortlich. Natürlich muss man die Warnungen und Hinweise genau studieren. Ich für meinen Teil begrüße die Möglichkeit, sich Warnungen als Fehler anzeigen lassen zu können. Zitat:
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Alternativen? |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Zitat:
Zitat:
Gruß -- |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Nee, nee. Is schon ok. Jedem das Seine... |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Wieso sollte das hier nur einer Warnung würdig sein:
Delphi-Quellcode:
oder z.B.:
Function TMyClass.FooBar : TSometing;
Begin If FSomeField > 123 Then Result := SomethingElse End;
Delphi-Quellcode:
Das sind F-e-h-l-e-r. Ganz einfach.
Procedure TMyClass.BarFoo;
Var iMyVariable : Integer; Begin If iMyVariable>123 Then DoSomething; ... Ich sach ja: Differenzieren muss man schon. Pauschal die Warnungen und Hinweise ignorieren führt zu interessanten Ergebnissen (a.k.a 'AV') |
Re: Handling von Fehlern, Warnungen und Hints
Es sagt auch niemand, dass man Warnungen pauschal ignorieren soll
|
Re: Handling von Fehlern, Warnungen und Hints
Es geht eigentlich darum, warum WARNINGS OFF nicht lokal sondern global, Warnungen ausschalten kann.
Wenn man eine fremde Unit verwendet, die soviele Warnungen produziert, dann kann man diese nicht unterdrücken, ohne alle Warnungen (auch seine eigenen) zu ignorieren. |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Hab mal vor längerer Zeit ein Tutorial dazu geschrieben: ![]() Schade, dass das so wenige lesen :( |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Delphi-Quellcode:
Oder soll Delphi hellsehen, wie es in deinem Quelltext aussieht ?
Durch Einfügen von Quelltext zwischen {$WARNINGS OFF} und {$WARNINGS ON} können Sie die Generierung von überflüssigen Warnmeldungen deaktivieren.
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
{$WARNINGS OFF} ist GLOBAL. <-- Das ist es, was ich denke, dass es abgeschafft werden sollte und durch eine lokale Direktive ersetzt. Es gibt {$WARN xx OFF} für bestimmte Warnungen, die sind lokal. |
Re: Handling von Fehlern, Warnungen und Hints
Entweder definieren wir "global" unterschiedlich, oder Du irrst.
Delphi-Quellcode:
{$WARNINGS OFF}
procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := 1 to 5 do; ShowMessage(inttostr(i)); //hier kommt keine Warnung end; {$WARNINGS ON} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 1 to 5 do; ShowMessage(inttostr(i)); //hier kommt eine Warnung end; |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Zitat:
Gruß -- |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
:-) Kann man sogar in den "Projekt -> Optionen -> Compiler-Meldungen" einstellen |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Mit lokal ist gemeint, dass pro Unit die Warnungen ein-/ausgeschaltet werden können. D.h. sobald "end." erreicht wurde, werden Warnungen wieder auf standard gesetzt. z.B. {$WARN XY OFF/ON} hat diese Eigenschaft. Sie ist nur in der Unit gültig, in der sie definiert wurde und auch nur ab der Zeile. Wenn du jedoch {$WARNINGS OFF} irgendwo in deinen 10000000 Units definierst, dann wird sobald der Compiler diese Stelle erreich, nie wieder eine Warnungen danach ausgegeben. Und schon hat man den Eindruck, dass es keine Warnungen gibt. Ist das nicht gefährlich? Ich sage: JA. Außerdem hat dein Quelltext ein Problem. Wenn irgendwer Warnungen ausschaltet, aus welchem Grund auch immer, dann kommen nach der Zeile trotzdem Warnungen. |
Re: Handling von Fehlern, Warnungen und Hints
Na dann, in your face, alzaimar ;-)
Gruß -- |
Re: Handling von Fehlern, Warnungen und Hints
Ich seh das Problem immernoch nicht so wirklich.
Wenn mir die Warnungen von "fremden" Units zu doof sind, dann pack ich nur deren .dcu-Dateien mit ins Projekt, dass diese nicht neu compiliert werden und die .pas-Dateien werden zum Bibliothekspfad zu Delphi hinzugefügt und gut. Somit kann ich in die Quellcodes reinschauen, hab aber keine Warnungen und keine Compilierung derselbigen... |
Re: Handling von Fehlern, Warnungen und Hints
Bei der JEDI API käme so ein besseres Warnungssystem wirklich gut an, da hier Warnungen ausgegeben werden, die nicht korrekt sind.
Beispiele:
Delphi-Quellcode:
"Rückgabewert der Funktion AddSecurityPackageW könnte undefiniert sein" - Das ist hier falsch.
var
_AddSecurityPackageW: Pointer; function AddSecurityPackageW; begin GetProcedureAddress(_AddSecurityPackageW, secur32, 'AddSecurityPackageW'); asm MOV ESP, EBP POP EBP JMP [_AddSecurityPackageW] end; end; Hier ein "result := " einzufügen wäre wahnsinnig, da man ein paar tausend Funktionen anpassen müsste. Weiterhin bekomme ich die Warnung "Unsicherer Code ASM". Die Vermutung ist falsch, da schon tausendfach erprobt. Hier noch unsichere Typen. Verständlich warum Delphi diese als unsicher definiert. Aber letztendlich sind die C Definition so und Zeiger ohne Typ haben auch ihren Sinn, und daran kann man nichts ändern. Ich bekomme da auch mehrere tausend Warnungen ausgesprochen. Zitat:
Übrigens: Die Kompilation mit den aktivierten Warnungen zwingt mein Delphi7 in die Knie. Nach einer Weile geht irgendwie nichts mehr (oder sehr langsam). Es gibt weiterhin Stellen, bei denen gleichwertige Records (LARGE_INTEGER <-> FILETIME) ineinander gecastet werden. Das erzeugt jedoch auch eine Warnung, obwohl es semantisch korrekt ist. Man könnte natürlich auch die einzelnen Recordmitglieder zueinander zuweisen. Das führt jedoch zu mehr Code und eine längere Ausführungsdauer. Bei einer Lib weiß man nie, wofür die Funktion genutzt wird und wie oft sie ausgeführt wird. Wenn ich nun für diese Warnungen in {$WARNINGS OFF} und {$WARNINGS ON} einschließe und Warnungen allgemein ausschalten, dann bekomme ich trotzdem Warnungen. Um alle Warnungen auszuschalten müsste man sich etwas überlegen oder alle WARNINGS ON entfernen. Das ist wie das Prinzip von Konstanten. Man schaltet an einer Stelle und überall, wo sie vorkommen, gibt es dieselbe Änderung. DCU-Dateien: Ich erlebe das mit der JEDI API immer erneut. Es kennt sich kaum jemand mit dem Prinzip aus. Die Leute fügen einfach den Pfad zur PAS-Datei in ihr Projekt ein und gut ist. Und dann bekomme ich Meldungen, dass ihre Projekte ewig zum Kompilieren brauchen und tausend Warnungen ausgeben. Es mag sein, dass für normale Delphianwender, das Warnsystem gut genug ist. Aber für die Verwaltung von größeren Bibliotheken ist es mangelhaft. Das war der Grund warum ich einfach ein {$WARNINGS OFF} eingesetzt habe. Alle Warnungen von JEDI API sind schlichtweg falsch. Weitherhin muss bei einer Änderung des Quelltextes, die DCU erneut erzeugt werden. Bei JEDI API&WSCL können solche Änderungen schonmal täglich vorkommen. Zudem werden Änderungen über das SVN verteilt, was bedeutet, dass jeder zu beliebigen Zeitpunkten Updates holen kann. Ich empfehle immer, dass die Leute, welche JwaWindows verwenden, diese als DCU Datei einbinden sollen, da die Kompilationszeit doch erheblich ist. Das Prinzip dahinter muss ich jedoch immer und immer wieder erklären, trotz Tutorials und Anleitungen. Wer sich damit auskennt ist natürlich gut bedient, aber die JEDI API&WSCL soll auch für Anfänger funktionieren. Und das Ziel ist es daher den Spagat hinzubekommen, es allen Recht machen zu können. Summa summarum: Bei der JEDI API&WSCL habt ihr also Glück. Es gibt schlichtweg keine Warnungen, die von Relevanz wären. Wir gehen sogar darüber hinaus und nutzen externe Quelltextanalysetools (z.B. PascalAnalyzer), um Probleme zu finden. Aber leider ist dies ein hoher Aufwand und große Hilfe dafür gibt es so gut wie garnicht in der Delphigemeinschaft. Aber deshalb gebe ich nicht auf und empfange natürlich jedes Angebot mit offenen Armen. |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Delphi-Quellcode:
Oder für Text nach dem offiziellen Ende von Units:
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF} // JEDI Code mit ganz vielen UNSAFE_... Warnungen {$WARN UNSAFE_TYPE DEFAULT} {$WARN UNSAFE_CODE DEFAULT}
Delphi-Quellcode:
{$WARN GARBAGE OFF}
end. afsfaf {$WARN GARBAGE DEFAULT} |
Re: Handling von Fehlern, Warnungen und Hints
Ich habe mir grad Mabuses Post durchgelesen. Da stehen die drin. Diese gibt es leider erst ab Delphi7, aber ich werde sie trotzdem mit entsprechenden IFDEFS einfügen.
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Wenn der Aufruf von GetProcedureAddress fehlschlagen würde, hättest du ein undefiniertes Ergebnis. |
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
-> jedi.inc :thumb: |
Re: Handling von Fehlern, Warnungen und Hints
GetProcedureAddress wirft eine Exception im Fehlerfall. Und selbst wenn nicht, dann ist _AddSecurityPackageW = nil und dann würde JMP _AddSecurityPackageW eine Exception werfen. Es gibt kein normalen Ausgang im Fehlerfall.
|
Re: Handling von Fehlern, Warnungen und Hints
Zitat:
Man (Du) geh(s)t davon aus, dass der Pointer immer mit nil vordefiniert ist. Das mag in der aktuellen Compilerversion so sein, ist aber für alle zukünftigen nicht garantiert. Aus diesem Grund sollen Variablen (und dazu gehört auch Dein Pointer) initialisiert werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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