Function init [src]

Prototype

pub fn init(allocator: Allocator) !SelfInfo

Parameters

allocator: Allocator

Source

pub fn init(allocator: Allocator) !SelfInfo { var debug_info: SelfInfo = .{ .allocator = allocator, .address_map = std.AutoHashMap(usize, *Module).init(allocator), .modules = if (native_os == .windows) .{} else {}, }; if (native_os == .windows) { errdefer debug_info.modules.deinit(allocator); const handle = windows.kernel32.CreateToolhelp32Snapshot(windows.TH32CS_SNAPMODULE | windows.TH32CS_SNAPMODULE32, 0); if (handle == windows.INVALID_HANDLE_VALUE) { switch (windows.GetLastError()) { else => |err| return windows.unexpectedError(err), } } defer windows.CloseHandle(handle); var module_entry: windows.MODULEENTRY32 = undefined; module_entry.dwSize = @sizeOf(windows.MODULEENTRY32); if (windows.kernel32.Module32First(handle, &module_entry) == 0) { return error.MissingDebugInfo; } var module_valid = true; while (module_valid) { const module_info = try debug_info.modules.addOne(allocator); const name = allocator.dupe(u8, mem.sliceTo(&module_entry.szModule, 0)) catch &.{}; errdefer allocator.free(name); module_info.* = .{ .base_address = @intFromPtr(module_entry.modBaseAddr), .size = module_entry.modBaseSize, .name = name, .handle = module_entry.hModule, }; module_valid = windows.kernel32.Module32Next(handle, &module_entry) == 1; } } return debug_info; }