DSYMUTIL(1)

๐Ÿ’… dsymutil โ€” yes bestie, the DWARF wrangler

okay so real quick, this is a page from the LLVM manual set (yes, that LLVM), and it's all about dsymutil, which manipulates archived DWARF debug symbol files. stay with me, it's gonna slay ๐Ÿซถ

โœจ NAME โœจ

dsymutil โ€” manipulate archived DWARF debug symbol files ๐Ÿฆ‹

๐ŸŒธ SYNOPSIS ๐ŸŒธ

dsymutil [options] executable

๐Ÿ’– DESCRIPTION ๐Ÿ’–

so here's the tea: dsymutil links up all the DWARF debug information it can find in the object files that belong to an executable (the executable in the synopsis, bestie), and it does it by using the debug symbols info sitting in that executable's symbol table. โœจ

by default, the linked debug info gets dropped into a .dSYM bundle named the same as the executable. no cap, that's the whole vibe. ๐Ÿ’…

๐Ÿ‘‘ OPTIONS ๐Ÿ‘‘

  • --accelerator=<accelerator type> โ€” pick what kind of accelerator table you want. the valid options are 'Apple', 'Dwarf', 'Default' and 'None'. so iconic of you to choose.
  • --allow <path> โ€” only process debug map objects that are listed in the YAML file at <path>. it only filters N_OSO entries, jsyk. and if --oso-prepend-path is specified, that path prefix applies too โ€” meaning the paths in the file should exactly match the ones in the N_OSO entries. exact match, no vibes-based matching. ๐Ÿ™ˆ
  • --arch <arch> โ€” only link DWARF debug info for the CPU architecture types you name. architectures can be specified by name. when you use this, you'll get an error back if any of the architectures can't be properly linked. you can pass this option multiple times, once per desired architecture. by default all CPU architectures get linked, and any architecture that can't be properly linked will make dsymutil return an error. picky, but honestly? valid. ๐Ÿ’…
  • --build-variant-suffix <suffix=buildvariant> โ€” set the build variant suffix used to build the executable file. a product's binary can have multiple variants, each built slightly differently. the most common build variants are 'debug' and 'profile'. and setting the DYLD_IMAGE_SUFFIX environment variable makes dyld load the specified variant at runtime. ๐ŸŒˆ
  • --codesign <identity> โ€” code sign the dSYM bundle with the given signing identity after linking. cannot be used with --flat or --no-output. (it's giving "choose one, bestie.") ๐Ÿ”ฅ
  • --disallow <path> โ€” exclude debug map objects listed in the YAML file at <path>. only filters N_OSO entries. and again, if --oso-prepend-path is specified, the path prefix applies, i.e. the paths in the file should exactly match those of the N_OSO entries. ๐ŸŒธ
  • --dump-debug-map โ€” dump the executable's debug-map (that's the list of object files holding the debug info) in YAML format and then exit. no DWARF link happens at all. literally just a peek, then dip. ๐Ÿ‘€
  • -D <path> โ€” specify a directory that contains dSYM files to search in. this is for mergeable libraries, so dsymutil knows where to look for dSYM files that have debug info about symbols present in those libraries. ๐ŸŽ€
  • --embed-resource <src-path>=<bundle-relative-path> โ€” copy a file or directory into the dSYM bundle's Contents/Resources/ directory. the argument is <source-path>=<destination-relative-to-Resources>. if the source is a directory, its contents get copied recursively. and yeah, you can pass this option multiple times. ๐Ÿ’œ
  • --fat64 โ€” use a 64-bit header when emitting universal binaries. thicc header energy. ๐Ÿ’€
  • --flat, -f โ€” produce a flat dSYM file. a .dwarf extension gets appended to the executable name unless you specify the output file with the -o option. ๐Ÿฆ‹
  • --gen-reproducer โ€” generate a reproducer made up of the input object files. this is an alias for --reproducer=GenerateOnExit. โœจ
  • --help, -h โ€” print this help output. hi, hello, here's the help. ๐Ÿซถ
  • --include-swiftmodules-from-interface โ€” whether or not to copy binary swiftmodules that were built from textual .swiftinterface files into the dSYM bundle. these typically come only from the SDK (since textual interfaces need library evolution), so copying them into the bundle is lowkey a waste of space. turn this on if the swiftmodules are different from the ones in the SDK. ๐Ÿงš
  • --keep-function-for-static โ€” make a static variable keep its enclosing function, even if that function would have been omitted otherwise. bestie said "you're not leaving." ๐Ÿ˜ญ
  • --no-object-timestamp โ€” don't check the timestamp for object files. โญ
  • --no-odr โ€” don't use ODR (the One Definition Rule) for uniquing C++ types. ๐ŸŒธ
  • --no-output โ€” do the link in memory, but don't emit the result file. all the effort, none of the artifacts. ๐Ÿ™ˆ
  • --no-swiftmodule-timestamp โ€” don't check the timestamp for swiftmodule files. โœจ
  • --num-threads <threads>, -j <threads> โ€” specifies the maximum number (n) of simultaneous threads to use when linking multiple architectures. more threads, more sparkle. ๐Ÿ”ฅ
  • --object-prefix-map <prefix=remapped> โ€” remap object file paths (but not source paths) before processing. use this for Clang objects where the module cache location was remapped using -fdebug-prefix-map, so dsymutil can find the Clang module cache. iykyk. ๐Ÿ’…
  • --oso-prepend-path <path> โ€” specifies a path to prepend to all debug symbol object file paths. ๐ŸŽ€
  • --out <filename>, -o <filename> โ€” specifies an alternate path to place the dSYM bundle. the default dSYM bundle path is created by appending .dSYM to the executable name. ๐ŸŒˆ
  • -q, --quiet โ€” enable quiet mode and limit output. shhh, main character is focusing. ๐Ÿคซ
  • --remarks-drop-without-debug โ€” drop remarks that don't have valid debug locations. without this flag, all remarks are kept. ๐Ÿ‘‘
  • --remarks-output-format <format> โ€” specify the format to use when serializing the linked remarks. ๐Ÿฆ‹
  • --remarks-prepend-path <path> โ€” specify a directory to prepend to the paths of the external remark files. ๐ŸŒธ
  • --reproducer <mode> โ€” specify the reproducer generation mode. valid options are 'GenerateOnExit', 'GenerateOnCrash', 'Use', 'Off'. โœจ
  • --statistics โ€” print statistics about how much each object file contributed to the linked debug info. it prints a table after linking with the object file name, the size of the debug info in the object file (in bytes), and the size contributed (in bytes) to the linked dSYM. the table is sorted by output size, listing the object files with the largest contribution first. leaderboard behavior, honestly iconic. ๐Ÿ†
  • -s, --symtab โ€” dumps the symbol table found in the executable or object file(s), then exits. โญ
  • -S โ€” output textual assembly instead of a binary dSYM companion file. ๐Ÿ’œ
  • --toolchain <toolchain> โ€” embed the toolchain in the dSYM bundle's property list. ๐ŸŽ€
  • -u, --update โ€” update an existing dSYM file so it contains the latest accelerator tables and other DWARF optimizations. this option rebuilds the '.apple_names' and '.apple_types' hashed accelerator tables. glow-up, but for a dSYM. โœจ
  • --use-reproducer <path> โ€” use the object files from the given reproducer path. this is an alias for --reproducer=Use. ๐Ÿฆ‹
  • --verbose โ€” display verbose information when linking. it's giving "tell me everything." ๐Ÿ—ฃ๏ธ
  • --verify โ€” run the DWARF verifier on the linked DWARF debug info. ๐Ÿงš
  • -v, --version โ€” display the version of the tool. ๐Ÿ’…
  • -y โ€” treat the executable as a YAML debug-map rather than an executable. plot twist. ๐Ÿ˜ญ

๐Ÿ”ฅ EXIT STATUS ๐Ÿ”ฅ

dsymutil returns 0 if the DWARF debug info was linked successfully. otherwise it returns 1. that's it, that's the whole system. ๐Ÿ’€

๐ŸŒˆ SEE ALSO ๐ŸŒˆ


๐Ÿ’– Author ๐Ÿ’–

maintained by the LLVM Team (https://llvm.org/). protect them at all costs. ๐Ÿซถ

2003-2026, LLVM Project โ€” periodt. ๐Ÿ‘‘


and that's the page, bestie ๐ŸŽ€ โ€” from the LLVM crew, version 23, dated 2026-10-20. go link some DWARF, you absolute icon. ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from
  • arch rolling: llvm 23.1.4-1 ยท Apache-2.0 WITH LLVM-exception
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms