Programline bei Error rausbekommen?

Hi,
gibt es bei VB ne Möglichkeit bei einem Fehler die aktuelle Programmzeile rauszubekommen? (Sowie z.B. __LINE__ in PHP.) Das Err-Objekt enhält z.T. nur unbefriedigende Daten.

Ralph

Hallo Ralph!

Die ‚on error goto‘ Anweisung solltest Du erst wenn das Programm im Großen und Ganzen funktioniert einsetzen. Wenn Du sie im Testbetrieb auskommentierst, legt Dir der Interpreter den Cursor auf die Zeile, wo das Problem aufgetaucht ist (was nicht bedeutet, daß auch dort die Korrektur vorzunehmen ist).

Eine weitere Möglichkeit wäre, dem Error-Object auch den Modulnamen mitzugeben, dann weißt Du zumindest, wo Du zu suchen beginnen mußt.

liebe Grüße

Wolfgang

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Schön und gut, aber…
Wenn die Software von mehreren Leuten entwickelt wird, werden dir die anderen was husten, wenn dein Teil keine Fehlerbehandlung hat. Andersrum kannst du deinen Teil aber nicht komplett testen, da er über COM oder CORBA auf andere Routinen zugreift, die andere Leute geschrieben haben oder noch schreiben werden. Im Sinne einer einheitlichen Fehlerbehandlung sollte man also möglichst schnell wissen, wo der Fehler liegt und dies sollte an das Modul, welches den Errorhandler enthält übergeben werden.

Den Methodennamen zu übergeben ist ja recht nett, aber wenn die Methode 10 COM-Methoden aufruft und irgendwo tritt ein Fehler auf, weil eine Methode mit was gefüttert wird, was eine andere falsch rausgibt, ist eine Zeilennummer schon besser, als nur der Name.

Ralph

Habe das schon verstanden
Ich weiß aber leider auch nicht, ob es geht, beziehungsweise bin ich mir ziemlich sicher, daß es nicht geht.
Ich meinte es ungefähr so:

public sub XY()
on error goto shit_is_steaming




exit sub
Shit_is_steaming:
msgbox err.number & vbcrlf & err.description & _
vbcrlf & err.source & vbcrlf & „Fehler passierte in Modul XY“, vbokonly, „Fehler“
end
end sub

Das ist die einzige Möglichkeit, die ich sehe, Dein Problem halbwegs in den Griff zu bekommen, aber wenn Du Prozeduren und Funktionen drinnen hast, die jenseits der 100 Zeilen Größe haben, tust Du Dir trotzdem schwer, den Fehler zu finden.

Tut mir leid, daß ich Dir nicht mehr helfen konnte

Gruß

Wolfgang

wenn andere Routinen mit falschen Werten gefüttert werden
und somit NUR falsche Werte zurückgeben entsteht ja
programmtechnisch garkein Fehler oder Abbruch. Wie willste
das denn rausfinden?

Alex

Gibt’s nicht gibt’s nicht!
Also mal den konkreten Fall, damit du siehst, worums geht (etwas vereinfacht dargestellt):

wenn andere Routinen mit falschen Werten gefüttert werden
und somit NUR falsche Werte zurückgeben entsteht ja
programmtechnisch garkein Fehler oder Abbruch. Wie willste
das denn rausfinden?

Natürlich kann da ein Fehler entstehen. Im konkreten Fall greife ich aus VB auf C+±Routinen zu, die auf eine XML-Datenstruktur zugreifen, welche einen Graphen aus Knoten und Kanten enthält.

Da in der DTD zu dieser XML-Datei steht, dass die Kanten von IDREF zu IDREF gehen und die Knoten die IDs enthalten, kann ich davon ausgehen, dass zu jeder Kante ein Begin- und ein End-Knoten existiert und mit einer Funktion GetBeginKnoten(Kante17) mir den Knoten holen.

Der Implementierer der Methode überprüfte nun aber beim reinladen der XML-Daten nicht auf die DTD, so kann die XML-Datenstruktur einen Graphen enthalten, wo zu einer Kante kein Knoten existiert.

Er hatte das in seiner Methode dann einfach dadurch gelöst, dass er keinen Fehler sondern 0 zurückliefert. Fehlerbehandlung macht mehr Arbeit. :smile:

(Was ich nicht abgefangen habe, da es bei richtiger Implementierung der Methode nicht vorkommen kann, sondern schon die Methode zum Reinladen der Datei einen Fehler schmeissen sollte (nämlich bei der nicht enthaltenen Funktion XML-validate)).

Wenn ich dann in meiner Methode einen Fehler erhalte, weil irgendwas nicht funzt wäre es schön, wenn ich wüsste wo, damit ich sehen könnte, dass in dieser Zeile eine Methode von mir Eingabedaten bekommt (Knotennummer 0), mit der sie nichts anfangen kann. Wenn ich diese Position kenne, weiss ich, dass entweder in dieser Methode oder in den Eingabedaten der Fehler liegt.

Im konkreten Fall konnte der Fehler bei der Entwicklung nicht entdeckt werden, da alle genutzten Testdaten DTD-konform waren.

Soweit nun dazu, was es alles gibt. Und ich hätte gerne eine Antwort erwartet, ob es die gewünschte Funktion gibt, oder nicht gibt, oder was es für Alternativen gibt. (Die Idee mit dem on error ausklammern war ja nicht schlecht, nur konnte sie im Entwurf wie oben genannt nichts bringen).

Ralph

Habe ich zufällig gefunden
http://www.download-web.de/dc_group.php3?fs_g1=Progr…

Da gibt es das, was Du brauchst.

Gruß

Gollum

Hallo VB-Experten,

Gollum schrieb in diesem Thred mit dem gleichen Betreff:

G> http://www.download-web.de/dc_group.php3?fs_g1=Progr…
G>
G> Da gibt es das, was Du brauchst.

Wem das Tool bei
http://www.sibental.com/autoerror/autoerror.htm
mit US-$ 179.00 zu teuer ist, kommt vielleicht mit der „Error Handling DLL“ und dem „Productivity Tools Add-In“ von
http://www.visualbasicexpert.com/Tools.htm
weiter.

Mit Wer-Weiss-Was-freudigen Grüssen

Martin L. Völker