Я не сталкивался с таким отладчиком, хотя кажется, что этот конкретный стиль будет слишком сложно написать самому. Просто базовая рекурсивная функция, передающая текущий объект и ячейку таблицы, чтобы тоже начать писать, а затем просто строить на ходу.
Что касается вышеприведенного комментария к циклической ссылке, его можно легко обойти, сохранив массив объектов, которые вы уже обработали. Перед обработкой объекта проверьте, есть ли он уже в списке. если это так, обозначьте это в поле значения вашего вывода как что-то вроде «циклической ссылки на» ... однако вы хотите обозначить объект вверх по иерархии.
prettyprint(object, processedObjects)
{
if (processedObjects.contains(object))
return 'circular refernece';
processedObjects.push(object);
create newTable;
for (var in object)
{
row = newTable.addRow();
row.cell1.value = var;
if (typeof object[var] is object)
row.cell2.value = prettyprint(object[var], processedObjects);
else if (typeof object[var] is function)
row.cell2.value = '[function]';
else
row.cell2.value = object[var].toString();
}
return newTable;
}