I’m having trouble getting error traces to work in my release builds:
$ zig build release
$ zig-out/release/gatorcat-0.5.3-x86_64-linux-musl run --ifname ehq
warning: clock(boot) resolution: 1 ns
warning: Scheduler: NORMAL
error(gatorcat): failed to open raw socket: .PERM
error: NonRecoverable
???:?:?: 0x1433a93 in ??? (/proc/self/exe)
???:?:?: 0x137027e in ??? (/proc/self/exe)
???:?:?: 0x137691b in ??? (/proc/self/exe)
???:?:?: 0x12f2f63 in ??? (/proc/self/exe)
I’ve turned on error traces on my module:
pub fn cliModule(
b: *std.Build,
target: std.Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode,
gatorcat_module: *std.Build.Module,
argparser_module: *std.Build.Module,
) *std.Build.Module {
const zbor_module = b.dependency("zbor", .{
.target = target,
.optimize = optimize,
}).module("zbor");
const zenoh_module = b.dependency("zenoh", .{
.target = target,
.optimize = optimize,
}).module("zenoh");
const cli_module = b.createModule(.{
.optimize = optimize,
.target = target,
.error_tracing = true,
.root_source_file = b.path("src/cli/main.zig"),
});
cli_module.addImport("gatorcat", gatorcat_module);
cli_module.addImport("argparser", argparser_module);
cli_module.addImport("zenoh", zenoh_module);
cli_module.addImport("zbor", zbor_module);
cli_module.addAnonymousImport("build_zig_zon", .{ .root_source_file = b.path("build.zig.zon") });
return cli_module;
}
pub fn buildCli(
b: *std.Build,
step: *std.Build.Step,
target: std.Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode,
gatorcat_module: *std.Build.Module,
argparser_module: *std.Build.Module,
dest_dir: std.Build.Step.InstallArtifact.Options.Dir,
exe_name: []const u8,
) *std.Build.Step.InstallArtifact {
const cli_module = cliModule(
b,
target,
optimize,
gatorcat_module,
argparser_module,
);
const cli_exe = b.addExecutable(.{ .name = exe_name, .root_module = cli_module });
const cli_install = b.addInstallArtifact(cli_exe, .{ .dest_dir = dest_dir });
step.dependOn(&cli_install.step);
return cli_install;
}
pub fn buildRelease(
b: *std.Build,
step_release: *std.Build.Step,
) void {
const targets = [_]std.Target.Query{
.{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .musl },
.{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .musl },
.{ .cpu_arch = .x86_64, .os_tag = .windows, .abi = .gnu },
};
for (targets) |target| {
const options: struct {
target: std.Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode,
} = .{
.target = b.resolveTargetQuery(target),
.optimize = .ReleaseSafe,
};
const gatorcat_module = b.createModule(.{
.root_source_file = b.path("src/module/root.zig"),
.target = options.target,
.optimize = options.optimize,
.error_tracing = true,
});
const argparser_module = b.createModule(.{
.root_source_file = b.path("src/argparser/root.zig"),
.target = options.target,
.optimize = options.optimize,
.error_tracing = true,
});
// depend on the npcap sdk if we are building for windows
switch (options.target.result.os.tag) {
.windows => {
if (b.lazyDependency("npcap", .{
.target = options.target,
.optimize = options.optimize,
})) |npcap| {
gatorcat_module.addImport("npcap", npcap.module("npcap"));
}
},
else => {},
}
const triple = target.zigTriple(b.allocator) catch @panic("oom");
_ = buildCli(
b,
step_release,
options.target,
options.optimize,
gatorcat_module,
argparser_module,
.{ .override = .{ .custom = "release" } },
std.fmt.allocPrint(b.allocator, "gatorcat-{s}-{s}", .{ gatorcat_version, triple }) catch @panic("oom"),
);
}
}
what am I missing here?
https://codeberg.org/jeffective/gatorcat/src/branch/main/build.zig