mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
Include assertion args in crash report
Add more parameters to mysterious/persistent/infrequent ScriptManager.Header recall failed assertion.
This commit is contained in:
@@ -628,8 +628,13 @@ pub const Script = struct {
|
|||||||
node: std.DoublyLinkedList.Node,
|
node: std.DoublyLinkedList.Node,
|
||||||
script_element: ?*Element.Html.Script,
|
script_element: ?*Element.Html.Script,
|
||||||
manager: *ScriptManager,
|
manager: *ScriptManager,
|
||||||
|
|
||||||
|
// for debugging a rare production issue
|
||||||
header_callback_called: bool = false,
|
header_callback_called: bool = false,
|
||||||
|
|
||||||
|
// for debugging a rare production issue
|
||||||
|
debug_transfer_id: u32 = 0,
|
||||||
|
|
||||||
const Kind = enum {
|
const Kind = enum {
|
||||||
module,
|
module,
|
||||||
javascript,
|
javascript,
|
||||||
@@ -697,8 +702,14 @@ pub const Script = struct {
|
|||||||
// temp debug, trying to figure out why the next assert sometimes
|
// temp debug, trying to figure out why the next assert sometimes
|
||||||
// fails. Is the buffer just corrupt or is headerCallback really
|
// fails. Is the buffer just corrupt or is headerCallback really
|
||||||
// being called twice?
|
// being called twice?
|
||||||
lp.assert(self.header_callback_called == false, "ScriptManager.Header recall", .{});
|
lp.assert(self.header_callback_called == false, "ScriptManager.Header recall", .{
|
||||||
|
.thd = transfer._header_done_called,
|
||||||
|
.t1 = self.debug_transfer_id,
|
||||||
|
.t2 = transfer.id,
|
||||||
|
.tries = transfer._tries,
|
||||||
|
});
|
||||||
self.header_callback_called = true;
|
self.header_callback_called = true;
|
||||||
|
self.debug_transfer_id = transfer.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
lp.assert(self.source.remote.capacity == 0, "ScriptManager.Header buffer", .{ .capacity = self.source.remote.capacity });
|
lp.assert(self.source.remote.capacity == 0, "ScriptManager.Header buffer", .{ .capacity = self.source.remote.capacity });
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ pub noinline fn crash(
|
|||||||
std.debug.dumpCurrentStackTraceToWriter(begin_addr, writer) catch abort();
|
std.debug.dumpCurrentStackTraceToWriter(begin_addr, writer) catch abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
report(reason, begin_addr) catch {};
|
report(reason, begin_addr, args) catch {};
|
||||||
},
|
},
|
||||||
1 => {
|
1 => {
|
||||||
panic_level = 2;
|
panic_level = 2;
|
||||||
@@ -71,7 +71,7 @@ pub noinline fn crash(
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn report(reason: []const u8, begin_addr: usize) !void {
|
fn report(reason: []const u8, begin_addr: usize, args: anytype) !void {
|
||||||
if (comptime IS_DEBUG) {
|
if (comptime IS_DEBUG) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -99,18 +99,24 @@ fn report(reason: []const u8, begin_addr: usize) !void {
|
|||||||
break :blk writer.buffered();
|
break :blk writer.buffered();
|
||||||
};
|
};
|
||||||
|
|
||||||
var stack_buffer: [4096]u8 = undefined;
|
var body_buffer: [8192]u8 = undefined;
|
||||||
const stack = blk: {
|
const body = blk: {
|
||||||
var writer: std.Io.Writer = .fixed(stack_buffer[0..4095]); // reserve 1 space
|
var writer: std.Io.Writer = .fixed(body_buffer[0..8191]); // reserve 1 space
|
||||||
|
inline for (@typeInfo(@TypeOf(args)).@"struct".fields) |f| {
|
||||||
|
writer.writeAll(f.name ++ ": ") catch break;
|
||||||
|
@import("log.zig").writeValue(.pretty, @field(args, f.name), &writer) catch {};
|
||||||
|
writer.writeByte('\n') catch {};
|
||||||
|
}
|
||||||
|
|
||||||
std.debug.dumpCurrentStackTraceToWriter(begin_addr, &writer) catch {};
|
std.debug.dumpCurrentStackTraceToWriter(begin_addr, &writer) catch {};
|
||||||
const written = writer.buffered();
|
const written = writer.buffered();
|
||||||
if (written.len == 0) {
|
if (written.len == 0) {
|
||||||
break :blk "???";
|
break :blk "???";
|
||||||
}
|
}
|
||||||
// Overwrite the last character with our null terminator
|
// Overwrite the last character with our null terminator
|
||||||
// stack_buffer always has to be > written
|
// body_buffer always has to be > written
|
||||||
stack_buffer[written.len] = 0;
|
body_buffer[written.len] = 0;
|
||||||
break :blk stack_buffer[0 .. written.len + 1];
|
break :blk body_buffer[0 .. written.len + 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
var argv = [_:null]?[*:0]const u8{
|
var argv = [_:null]?[*:0]const u8{
|
||||||
@@ -119,7 +125,7 @@ fn report(reason: []const u8, begin_addr: usize) !void {
|
|||||||
"-H",
|
"-H",
|
||||||
"Content-Type: application/octet-stream",
|
"Content-Type: application/octet-stream",
|
||||||
"--data-binary",
|
"--data-binary",
|
||||||
stack[0 .. stack.len - 1 :0],
|
body[0 .. body.len - 1 :0],
|
||||||
url[0 .. url.len - 1 :0],
|
url[0 .. url.len - 1 :0],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user