Пример #1
0
        public static void PrintError(IntPtr ctx, int idx, string filename)
        {
            string err;

            if (DuktapeDLL.duk_is_error(ctx, idx))
            {
                DuktapeDLL.duk_get_prop_string(ctx, idx, "stack");
                err = DuktapeDLL.duk_safe_to_string(ctx, -1);
                DuktapeDLL.duk_pop(ctx);
            }
            else
            {
                err = DuktapeDLL.duk_safe_to_string(ctx, idx);
            }

            if (duk_source_position != default_duk_source_position)
            {
                var errlines = err.Split('\n');
                err = "";
                if (_stRegex == null)
                {
                    _stRegex = new Regex(@"^\s+at\s(.+)\s\((.+\.js):(\d+)\)(.*)$", RegexOptions.Compiled);
                }
                for (var i = 0; i < errlines.Length; i++)
                {
                    var line    = errlines[i];
                    var matches = _stRegex.Matches(line);
                    if (matches.Count == 1)
                    {
                        var match = matches[0];
                        if (match.Groups.Count >= 4)
                        {
                            var funcName   = match.Groups[1].Value;
                            var fileName   = match.Groups[2].Value;
                            var lineNumber = 0;
                            int.TryParse(match.Groups[3].Value, out lineNumber);
                            var extra          = match.Groups.Count >= 5 ? match.Groups[4].Value : "";
                            var sroucePosition = duk_source_position(ctx, funcName, fileName, lineNumber);
                            err += $"    at {sroucePosition}{extra}\n";
                            continue;
                        }
                    }
                    err += line + "\n";
                }
            }
            if (filename != null)
            {
                Debug.LogError($"[JSError][{filename}] {err}");
            }
            else
            {
                Debug.LogError($"[JSError] {err}");
            }
        }