DSYMUTIL(1)

πŸ’… DSYMUTIL(1) πŸ’…

okay so this is the dsymutil page from the LLVM manual set, and bestie, it's literally the tool that stitches your DWARF debug info back together. buckle up πŸŽ€


✨ NAME ✨

dsymutil β€” manipulate archived DWARF debug symbol files πŸ¦‹


✨ SYNOPSIS ✨

dsymutil [options] executable

✨ DESCRIPTION ✨

so here's the tea β˜• β€” dsymutil links the DWARF debug information it finds in the object files for an executable, using the debug symbol info chilling in that executable's symbol table. it's giving matchmaker, honestly πŸ’–

by default, the linked debug information gets dropped into a .dSYM bundle with the same name as the executable. cute, tidy, iconic. πŸ‘‘


✨ OPTIONS ✨

  • --accelerator=<accelerator type> β€” pick which kind of accelerator table you want. the valid options are 'Apple', 'Dwarf', 'Default' and 'None'. choose your fighter πŸ’…
  • --arch <arch> β€” only link DWARF debug info for the CPU architecture types you name here, and yeah you can name them by name. ⚠️ if you use this and any architecture can't be properly linked, you get an error. you can pass this option multiple times β€” once for each architecture you want. by default all CPU architectures get linked, and if any of them can't be properly linked, dsymutil returns an error. no silent failures here, we don't do that πŸ™ˆ
  • --dump-debug-map β€” dump the executable's debug-map (that's the list of object files holding the debug info) in YAML format, then dip. no DWARF link happens at all. just vibes and YAML ✨
  • --flat, -f β€” produce a flat dSYM file. a .dwarf extension gets appended to the executable name β€” unless you specified the output file with the -o option, in which case, you already chose. 🫢
  • --gen-reproducer β€” generate a reproducer made of the input object files. this is an alias for –reproducer=GenerateOnExit. 🧚
  • --help, -h β€” print this help output. the classic. the GOAT. πŸ’€
  • --keep-function-for-static β€” makes a static variable keep the enclosing function, even if it would've been omitted otherwise. protective energy fr fr πŸ›‘οΈ
  • --minimize, -z β€” when you're creating a dSYM file, this one suppresses the emission of the .debug_inlines, .debug_pubnames, and .debug_pubtypes sections, because dsymutil currently has better equivalents: .apple_names and .apple_types. and when you use it together with the --update option, it'll cause redundant accelerator tables to be removed. cleanup era 🧹
  • --no-odr β€” don't use ODR (One Definition Rule) for uniquing C++ types. hard pass on the ODR, respectfully. πŸ™…
  • --no-output β€” do the link in memory, but don't emit the result file. all the work, none of the artifact. it's giving invisible labor 😭
  • --no-swiftmodule-timestamp β€” don't check the timestamp for swiftmodule files. time is a construct anyway ⏰
  • --num-threads <threads>, -j <threads> β€” sets the maximum number (n) of simultaneous threads to use when linking multiple architectures. multitasking queen πŸ‘‘
  • --object-prefix-map <prefix=remapped> β€” remap object file paths (but no source paths) before processing. use this for Clang objects where the module cache location was remapped using -fdebug-prefix-map β€” it helps dsymutil find the Clang module cache. πŸ—ΊοΈ
  • --oso-prepend-path <path> β€” specify a path to prepend to all debug symbol object file paths. ✨
  • --out <filename>, -o <filename> β€” specify an alternate path to place the dSYM bundle. the default dSYM bundle path is created by appending .dSYM to the executable name. your call, bestie πŸ’…
  • --papertrail β€” when you're running dsymutil as part of your build system, it can be desirable for warnings to be part of the end product, rather than just being emitted to the output stream. when enabled, warnings get embedded in the linked DWARF debug information. leaving a paper trail, literally 🧻✨
  • --remarks-output-format <format> β€” specify the format to be used when serializing the linked remarks. πŸ“
  • --remarks-prepend-path <path> β€” specify a directory to prepend the paths of the external remark files. πŸ“
  • --reproducer <mode> β€” specify the reproducer generation mode. valid options are 'GenerateOnExit', 'GenerateOnCrash', 'Use', 'Off'. pick your path πŸ”€
  • --statistics β€” print statistics about the contribution of each object file to the linked debug info. this 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, we love to see it πŸ“ŠπŸ”₯
  • --symbol-map <bcsymbolmap> β€” update the existing dSYMs inplace using the symbol map specified. inplace. yes. 🫢
  • -s, --symtab β€” dumps the symbol table found in the executable or object file(s) and exits. peek behind the curtain πŸ‘€
  • -S β€” output textual assembly instead of a binary dSYM companion file. old school, textual, slay ✍️
  • --toolchain <toolchain> β€” embed the toolchain in the dSYM bundle's property list. πŸ› οΈ
  • -u, --update β€” update an existing dSYM file to contain the latest accelerator tables and other DWARF optimizations. this option will rebuild the '.apple_names' and '.apple_types' hashed accelerator tables. glow-up for your dSYM πŸ’–
  • --use-reproducer <path> β€” use the object files from the given reproducer path. alias for –reproducer=Use. 🧚
  • --verbose β€” display verbose information when linking. talk your talk πŸ—£οΈ
  • --verify β€” run the DWARF verifier on the linked DWARF debug info. trust but verify, always πŸ”
  • -v, --version β€” display the version of the tool. iykyk ⭐
  • -y β€” treat the executable as a YAML debug-map rather than an executable. plot twist πŸ™ˆ

✨ EXIT STATUS ✨

dsymutil returns 0 if the DWARF debug information was linked successfully. otherwise, it returns 1. simple as that β€” no in-between, no "it depends" πŸ’€


✨ SEE ALSO ✨

llvm-dwarfdump(1) β€” go give it a read, bestie πŸ¦‹


✨ AUTHOR ✨

Maintained by the LLVM Team (https://llvm.org/). πŸ‘‘


2003-2023, LLVM Project


okay that's the whole page, no notes πŸŽ€ and for the record: this was the LLVM manual, version 15, dated 2023-07-14. periodt. πŸ’…βœ¨πŸ’–

πŸ“¦ where this page comes from