Exemplo n.º 1
0
        private static string duk_get_stacktrace(IntPtr ctx)
        {
            var stacktrace = "stacktrace:\n";

            for (int i = -2; ; i--)
            {
                DuktapeDLL.duk_inspect_callstack_entry(ctx, i);
                if (!DuktapeDLL.duk_is_undefined(ctx, -1))
                {
                    DuktapeDLL.duk_get_prop_string(ctx, -1, "lineNumber");
                    var lineNumber = DuktapeDLL.duk_to_int(ctx, -1);
                    DuktapeDLL.duk_get_prop_string(ctx, -2, "function");
                    DuktapeDLL.duk_get_prop_string(ctx, -1, "name");
                    var funcName = DuktapeDLL.duk_safe_to_string(ctx, -1);
                    DuktapeDLL.duk_get_prop_string(ctx, -2, "fileName");
                    var fileName = DuktapeDLL.duk_safe_to_string(ctx, -1);
                    DuktapeDLL.duk_pop_n(ctx, 4);
                    stacktrace += (duk_source_position ?? default_duk_source_position)(ctx, funcName, fileName, lineNumber);
                    stacktrace += "\n";
                }
                else
                {
                    DuktapeDLL.duk_pop(ctx);
                    break;
                }
            }
            return(stacktrace);
        }
Exemplo n.º 2
0
        private static string duk_get_stacktrace(IntPtr ctx)
        {
            var  stacktrace   = "\n";
            uint malloc_count = 0;
            uint malloc_size  = 0;
            var  vm           = DuktapeVM.GetVM(ctx);

            if (vm != null)
            {
                vm.GetMemoryState(out malloc_count, out malloc_size);
                if (malloc_count != 0)
                {
                    stacktrace += $"allocations: {malloc_count} [{malloc_size}]\n";
                }
            }
            stacktrace += "stacktrace:\n";
            for (int i = -2; ; i--)
            {
                DuktapeDLL.duk_inspect_callstack_entry(ctx, i);
                if (!DuktapeDLL.duk_is_undefined(ctx, -1))
                {
                    DuktapeDLL.duk_get_prop_string(ctx, -1, "lineNumber");
                    var lineNumber = DuktapeDLL.duk_to_int(ctx, -1);
                    DuktapeDLL.duk_get_prop_string(ctx, -2, "function");
                    DuktapeDLL.duk_get_prop_string(ctx, -1, "name");
                    var funcName = DuktapeDLL.duk_safe_to_string(ctx, -1);
                    DuktapeDLL.duk_get_prop_string(ctx, -2, "fileName");
                    var fileName = DuktapeDLL.duk_safe_to_string(ctx, -1);
                    DuktapeDLL.duk_pop_n(ctx, 4);
                    stacktrace += (duk_source_position ?? default_duk_source_position)(ctx, funcName, fileName, lineNumber);
                    stacktrace += "\n";
                }
                else
                {
                    DuktapeDLL.duk_pop(ctx);
                    break;
                }
            }
            return(stacktrace);
        }