• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zugriff auf Stacktrace?

Gilles

Blogger
Hallo Leute,
mich beschäftigt in letzter Zeit immer häufiger das Debugging in Javascript. Für diese Zwecke hab ich mir ein kleines Logging Framework gebaut, welches mit einem Loglevel loggt.
nun erstell ich ein Objekt meines loggers, den ich einer anderen Funktion benutze:
Code:
function test() {
var log = new Logger({"level" : "debug"});

log.debug("test");

}

Wenn ich den Code nun ausführen lasse und mein Logger in die Konsole schreibt, wird als Zeilenanzahl natürlich die Zeile ausgegeben wo mein Logger console.debug aufruft.
Nun würde ich aber gerne in meiner Nachricht, die Zeilennummer des Befehls ausgeben lassen, wo log.debug aufgerufen wird. Ist so etwas möglich?
Ich weiß nur wie ich an den caller ran komme
arguments.callee.caller
aber leider nicht mehr.

Vielleicht kennt ihr da was :)
Danke im Vorraus für jeden Tipp

Gilles
 
Werbung:
Habs mal im Chrome ausprobiert. Leider scheint es dort nicht zu gehen. Mein Beispiel-Code:
HTML:
<html>
    <head>
        <script type="text/javascript">
            
            function test () {
                var log = new Logger();
                log.log();
            }
            
            function Logger() {
             this.log = function(){
                console.debug("Log ", this.caller);
           };
                
            }
            
            new test();
        </script>
    </head>
    <body></body>
</html>
 
Werbung:
"nicht gehen" würde ich normalerweise als unzureichende Fehlerbeschreibung sehen, aber weil's du bist ;)

Die Eigenschaft heißt Function.caller, bezieht sich also auf eine Funktion, nicht auf ein Objekt. Das heißt also du musst die Funktion referenzieren. Also so:
Code:
function Logger() {
             this.log = function(){
                console.debug("Log ", this.log.caller);
};

oder allgemeiner:
Code:
function Logger() {
             this.log = function(){
                console.debug("Log "+ arguments.callee.caller);
};
 
"nicht gehen" würde ich normalerweise als unzureichende Fehlerbeschreibung sehen, aber weil's du bist ;)

Schwache Leistung von mir :D Aber danke für die Antwort.
Mit "nicht gehen" meinte ich diesem Fall, dass der caller undefined ist. Aber dank deinem Beitrag bekomme ich schon die caller Funktion. Nun muss ich nur schauen ob ich die Zeilennummer über den caller herausbekomme. :)
 
Zurück
Oben