2 * (C) Copyright 2007 John J. Foerch
3 * (C) Copyright 2007-2008 Jeremy Maitin-Shepard
5 * Use, modification, and distribution are subject to the terms specified in the
11 var MAX_DUMP_DEPTH = 1;
12 function dump_obj_r (obj, name, indent, depth) {
13 if (depth > MAX_DUMP_DEPTH) {
14 return indent + name + ": <Maximum Depth Reached>\n";
16 if (typeof obj == "object") {
18 var output = indent + name + "\n";
20 for (var item in obj) {
24 child = "<Unable to Evaluate>";
26 if (typeof child == "object") {
27 output += dump_obj_r(child, item, indent, depth + 1);
29 output += indent + item + ": " + child + "\n";
38 function dump_obj (obj, name) {
39 if (typeof obj == "object") {
41 var output = name + "\n";
42 for (var item in obj) {
46 child = "<Unable to Evaluate>";
48 output += item + ": " + child + "\n";
56 function get_interface_info (o) {
60 o.QueryInterface(Ci[x]);
64 o.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci[x]);
65 output += x + " (getInterface)\n";
74 * This simple facility can be used to execute arbitrary expression in the context of some point that you'd like to debug.
75 * At that point, simply set some global variable to the result of: eval(DEBUG_HERE);
76 * For example: conkeror.my_debug_ref = eval(DEBUG_HERE);
77 * Then if you call: conkeror.my_debug_ref("some expression"), the specified expression is evaluated in the context
78 * at which eval(DEBUG_HERE) was called.
80 * Note that the unusual identifier __DEBUG_HERE is simply used to
81 * avoid clobbering any identifiers that you might want to examine in
84 const DEBUG_HERE = "function (__DEBUG_HERE) { return eval(__DEBUG_HERE); }";
88 let (console = Cc["@mozilla.org/consoleservice;1"]
89 .getService(Ci.nsIConsoleService)) {
90 console.registerListener({
91 observe: function (msg) {
92 if (msg instanceof Ci.nsIScriptError) {
93 switch (msg.category) {
95 case "content javascript":
98 msg.QueryInterface(Ci.nsIScriptError);
99 dumpln("Console error: " + msg.message);
100 dumpln(" Category: " + msg.category);