2010-12-15 126 views
4

J'ai un hôte de script qui exécute JScript. Il y a des cas où je dois tracer si une méthode de mes objets exposés est appelée et d'où elle a été appelée. Pour cela, j'ai besoin de déterminer où est le moteur de script actuellement dans la méthode de mon objet.Comment la position de la source du script peut-elle être déterminée à partir d'un appel d'automatisation?

Il doit s'agir des mêmes informations que lorsque OnScriptError de mon site est appelé: source source char et le cookie que j'ai transmis à ParseScriptText.

Est-il possible d'obtenir cette information sans générer d'erreur?

+0

des références sur le Web, il semble que si j'ajoute le débogage des installations à mon hôte pourrait aider. Le problème est que les deux descriptions que j'ai trouvées à propos de l'ajout de cette fonctionnalité impliquent l'instanciation d'un objet COM "gestionnaire de débogage de processus" qui n'existe que dans Windows si Visual Studio ou MS Script Debugger est installé. Il est très probable que mes utilisateurs n'en auront pas. – r4w8173

+0

Il est étrange que j'ai trouvé plusieurs questions similaires sur le web mais sans aucune réponse. Pas même un type de réponse "ce n'est pas possible". Je me demande comment personne ne le sait ... – r4w8173

+0

Quel composant COM utilisez-vous? Avez-vous regardé dans la documentation? –

Répondre

0

Avez-vous essayé quelque chose comme le code ci-dessous? Cela devrait vous donner une trace de pile complète avec les noms de fonctions et les valeurs d'argument, mais sans les numéros de ligne.

Ne sait pas ce qu'est ParseScriptText.

(de https://github.com/emwendelin/Javascript-Stacktrace et http://eriwen.com/javascript/stacktrace-update/)

other: function(curr) { 
    var ANON = '{anonymous}', fnRE = /function\s*([\w\-$]+)?\s*\(/i, 
     stack = [], fn, args, maxStackSize = 10; 

    while (curr && stack.length < maxStackSize) { 
     fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON; 
     args = Array.prototype.slice.call(curr['arguments']); 
     stack[stack.length] = fn + '(' + this.stringifyArguments(args) + ')'; 
     curr = curr.caller; 
    } 
    return stack; 
}, 
+0

Il ne s'agit pas de JavaScript dans votre navigateur. Il s'agit du moteur JScript de Microsoft hébergé dans votre propre application. Lisez les commentaires sur la question originale. – r4w8173

+0

pourquoi cela ne fonctionnerait-il pas pour le JScript? Vous pouvez ajouter cette fonction au code et l'appeler plus tard à partir de Delphi. – kaboom

+0

J'ai pensé à cela aussi mais le problème est que je ne peux pas déterminer le morceau de code dans lequel le point d'exécution est. J'ai plus d'un bloc de code JScript comme en HTML. La solution que vous avez proposée sous une forme un peu plus complexe est la solution temporaire actuelle mais ce n'est pas 100% que je voudrais atteindre. – r4w8173