taken from console.js in core:

exports.trace = function(label) {
  // TODO probably can to do this better with V8's debug object once that is
  // exposed.
  var err = new Error;
  err.name = 'Trace';
  err.message = label || '';
  Error.captureStackTrace(err, arguments.callee);
  console.error(err.stack);
};

Am Freitag, 14. Dezember 2012 08:06:24 UTC+1 schrieb Jonathan Dickinson:
>
> It looks like you can only do it with errors:
>
> (new Error()).stack
>
> Taking require() as an example (if you were in control of it) you would 
> make require() add the stack trace to the module before any code in the 
> module executes. Now within the context of the B load you find out that it 
> is a cycle back to A, so your require() method would do something like:
>
> function require(arg) {
>   var stackInfo = getStackInfo(arg);
>   if (stackInfo) {
>    // We can do this because the 'prologue' of "A" would have populated 
> the stack trace in our internal modules set.
>    throw new CycleError(getStackInfo(arg) + " [" + arg + "] has a cyclic 
> dependency with [" + currentModule + "] " + (new Error()).stack;
>   }
> }
>
> Alternatively you could require that your components advertise their 
> dependencies up-front (similar to package.json). You could then discover 
> cycles (and load order, by the way) before running anything using Tarjan's 
> Strong Connected Components Algorithm: 
> http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm
> .
>
> At the end of the day though getting source information for a function 
> could be an amazing addition for so many development cases, especially 
> providing useful debugging info.
>
> On Friday, 14 December 2012 06:23:16 UTC+2, Martin Heidegger wrote:
>>
>> Hello everybody,
>>
>> I am writing on a system that should detect and resolve dependencies of 
>> code before executing it. So method A references method B so method B needs 
>> to be called before A. So far that works fine, however when I throw a 
>> circular dependency error message all the error message says is "[function] 
>> has a circular dependency to [function]"... thats very few information for 
>> debugging. I want to improve on that by at least displaying the line-number 
>> of the methods. So far I haven't found a way to do that. It should be 
>> possible because the VM should know where a method has been written (else 
>> it could not tell me the location on a stacktrace).
>>
>> Have I missed something? Is this worth a feature request?
>>
>> yours
>> Martin.
>>
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to