# \[GUIDE\] Symbolicating Release Builds

**URL:** <https://forum.juce.com/t/guide-symbolicating-release-builds/27151>\
**Category:** Development\
**Created:** [April 9, 2018, 4:53pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151 "2018-04-09T16:53:40Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ttg](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/ttg/32/14456_2.png) [@ttg](https://forum.juce.com/u/ttg)\
**Post date:** [April 9, 2018, 4:53pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/1 "2018-04-09T16:53:40Z")

</div>

Since this is a very common question I’ve made a sample project to help getting started with symbol-less Release builds (while still keeping symbols to allow symbolicating user’s crashes later).

Hope it’ll be helpful. The README.md contains pretty much everything needed to get you up and running for macOS and Windows.

So here is the repo on github:

> **[talaviram/SymbolFriendlyPlugIn](https://github.com/talaviram/SymbolFriendlyPlugIn)**
>
> An example project for creating audio plug-ins without exposing symbols. - talaviram/SymbolFriendlyPlugIn

---

<div class="post-metadata">

**Author:** ![jimc](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/jimc/32/16067_2.png) [@jimc](https://forum.juce.com/u/jimc)\
**Post date:** [November 21, 2019, 11:43am UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/2 "2019-11-21T11:43:30Z")

</div>

We use SYMSTORE on windows for our apps to save the symbols. I think it’d work fine with plugins too. Debugging with a minidump file is then super-easy (just install same version as crash and double click the DMP file):

> **[Debugging with Symbols - Win32 apps](https://docs.microsoft.com/en-us/windows/win32/dxtecharts/debugging-with-symbols?redirectedfrom=MSDN)**
>
> This article provides a high level overview of how to best use symbols in your debugging process.

---

<div class="post-metadata">

**Author:** ![alatar](https://avatars.discourse-cdn.com/v4/letter/a/34f0e0/32.png) [@alatar](https://forum.juce.com/u/alatar)\
**Post date:** [June 27, 2020, 7:23pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/3 "2020-06-27T19:23:31Z")

</div>

Hi Ttg,

Is it possible, things have changed in XCode 11.5 running on OSX 10.15.5?

But firstly, let me thank you for your post.  
I am having the exact same problem, as you describe. I want a plugin without exposing my symbols. And I still want to retain the dSym file, in order to symbolicate a crash.

I built your plugin using your build\_macos.sh script. Building works fine. But the result is not as expected. The crash log does unfortunately still contain the symbols of the application.

Maybe things have changed in XCode 11.5 running on OSX 10.15.5 (Catalina)?  
Maybe I need to add additional flags to Xcodebuild?

Here is what my crash log looks like, when running the stand-alone version of your project:  
I am only showing the thread, which crashed:

#####################  
Thread 4 Crashed:: MacBook Pro Speakers  
0 com.yourcompany.SymbolFriendlyPlugIn 0x000000010f05ffe9 SymbolFriendlyPlugInAudioProcessor::processBlock(juce::AudioBuffer&, juce::MidiBuffer&) + 169 (PluginProcessor.cpp:135)  
1 com.yourcompany.SymbolFriendlyPlugIn 0x000000010f08c58f juce::AudioProcessorPlayer::audioDeviceIOCallback(float const\*\*, int, float\*\*, int, int) + 1711 (juce\_AudioProcessorPlayer.cpp:175)  
2 com.yourcompany.SymbolFriendlyPlugIn 0x000000010f070305 juce::AudioDeviceManager::CallbackHandler::audioDeviceIOCallback(float const\*\*, int, float\*\*, int, int) + 853 (juce\_AudioDeviceManager.cpp:54)  
3 com.yourcompany.SymbolFriendlyPlugIn 0x000000010f069c30 juce::CoreAudioClasses::AudioIODeviceCombiner::run() + 2112 (juce\_mac\_CoreAudio.cpp:1614)  
4 com.yourcompany.SymbolFriendlyPlugIn 0x000000010f0a8e8f juce::threadEntryProc(void\*) + 527 (juce\_posix\_SharedCode.h:834)  
5 libsystem\_pthread.dylib 0x00007fff69bdc109 \_pthread\_start + 148  
6 libsystem\_pthread.dylib 0x00007fff69bd7b8b thread\_start + 15  
#####################

As you can see in this excerpt, there are still a lot of symbols listed. Any ideas how to get rid of them, while still keeping the dSYM file?

Full crash log is attached:  
[SymbolFriendlyPlugIn\_2020-06-27-211115\_Martins-MacBook-Pro.crash](https://forum.juce.com/uploads/short-url/qBZktZj388LtEoSK0nQsaCiwGvo.crash) (74.8 KB)

---

<div class="post-metadata">

**Author:** ![pizzafilms](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/pizzafilms/32/562_2.png) [@pizzafilms](https://forum.juce.com/u/pizzafilms)\
**Post date:** [November 18, 2020, 7:47pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/4 "2020-11-18T19:47:20Z")

</div>

Any updates on this for Mac with Xcode 12?

---

<div class="post-metadata">

**Author:** ![ttg](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/ttg/32/14456_2.png) [@ttg](https://forum.juce.com/u/ttg)\
**Post date:** [December 7, 2020, 8:45am UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/5 "2020-12-07T08:45:08Z")

</div>

Thanks. I’ll update the example code.  
My workplace is also expected to get some Apple Silicon machines so we’ll be able to do extra testing for it.

---

<div class="post-metadata">

**Author:** ![dave96](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/dave96/32/8487_2.png) [@dave96](https://forum.juce.com/u/dave96)\
**Post date:** [December 7, 2020, 9:54am UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/6 "2020-12-07T09:54:17Z")

</div>

Does anyone know the process for doing this on Linux?

---

<div class="post-metadata">

**Author:** ![KoenTanghe](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/koentanghe/32/533_2.png) [@KoenTanghe](https://forum.juce.com/u/KoenTanghe)\
**Post date:** [September 6, 2021, 5:20pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/7 "2021-09-06T17:20:24Z")

</div>

Anyone else seeing hundreds of warnings with Xcode 12.4 now saying:

```
"warning: could not find referenced DIE"

```

while Xcode is generating the dsym file?

In my (standalone app) project, I have the following “Custom Xcode Flags” in the Projucer:

```
LD_RUNPATH_SEARCH_PATHS="@loader_path/../Frameworks"
CONFIGURATION_BUILD_DIR="$(SRCROOT)/$(CONFIGURATION)"
DEBUG_INFORMATION_FORMAT=dwarf-with-dsym
GCC_GENERATE_DEBUGGING_SYMBOLS=YES
DEPLOYMENT_POSTPROCESSING=YES

```

I had macOS architecture set to “Standard 64-bit” and left the “Valid architectures” of the exporter to the defaults (all checked), so it was building both the x86\_64 and the arm64 architectures, so I thought maybe that was the cause (used to build only x86\_64), but also if I explicitly set only x86\_64, I get the same warnings…

It only happens in a release build, not in a debug build…  
I do have “Debug Mode” set to Disabled in the Projucer for the release build (it’s Enabled for debug build), but the flags are there for both builds.

I’ll keep trying things, but if anyone had this too?

---

<div class="post-metadata">

**Author:** ![alatar](https://avatars.discourse-cdn.com/v4/letter/a/34f0e0/32.png) [@alatar](https://forum.juce.com/u/alatar)\
**Post date:** [September 6, 2021, 5:27pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/8 "2021-09-06T17:27:09Z")

</div>

Yes, also getting those “warning: could not find referenced DIE” warnings.  
Unfortunately I have not yet found out, what causes them.

---

<div class="post-metadata">

**Author:** ![KoenTanghe](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/koentanghe/32/533_2.png) [@KoenTanghe](https://forum.juce.com/u/KoenTanghe)\
**Post date:** [September 7, 2021, 10:45am UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/9 "2021-09-07T10:45:20Z")

</div>

I just tried to (and could indeed) reproduce this with one of the standard JUCE example projects (AudioAppDemo):

- opened the example project in the Projucer
- for the Xcode exporters (Debug and Release), added this to the “Custom Xcode flags”:  
`DEBUG_INFORMATION_FORMAT=dwarf-with-dsym, GCC_GENERATE_DEBUGGING_SYMBOLS=YES, DEPLOYMENT_POSTPROCESSING=YES`
- saved the project, opened it in Xcode and made sure that “Build Active Architecture Only” is also set to “No” for the Debug configuration
- built the 2 configurations in Xcode (just “Product → Build” for the Debug build, and “Product → Build for → Profiling” for the Release build)

Result:

- Debug builds fine without warnings
- Release builds fine too, but has 1567 warnings saying:  
`could not find referenced DIE`  
(in the step: `Generate AudioAppDemo.app.dSYM`)

I then also tried only building the x86\_64 architecture, thinking it might have something to do with the new additional ARM configuration, by doing this in the Projucer:

- set “Valid Architectures” to only “x86\_64” in the main Xcode exporter item
- set “macOS Architecture” to “Standard 64-bit” (for both the Debug and Release configurations)

Result:

Exactly the same: no warnings for Debug, lots of warnings for Release.

This was done with Xcode 12.4 and JUCE 6.0.8 (master branch on 6 April 2021, 90e8da0cfb54ac593cdbed74c3d0c9b09bad3a9f).

I’ll see if it’s still the same on the very latest / current master branch.  
Edit: yes, exactly the same with the latest / current master branch (after rebuilding the Projucer and re-saving the example project of course).

At this point, I think I’ll just have to ignore this, unless @ed95, @t0m or someone else has any ideas?

---

<div class="post-metadata">

**Author:** ![vallant](https://avatars.discourse-cdn.com/v4/letter/v/c57346/32.png) [@vallant](https://forum.juce.com/u/vallant)\
**Post date:** [September 22, 2021, 10:20am UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/10 "2021-09-22T10:20:46Z")

</div>

We’re seeing the same issues and would be happy to find a solution for these.

I just wanted to mention that it’s not strictly necessary to use Xcode for symbolication, as the Xcode flags just configure post-build steps.  
The following non-xcode specific steps are necessary for achieving the same result:

- Add the clang `-g` compiler flag to force generation of debug symbols, e.g.

- Add a post-build step to generate a .dsym: `dsymutil plugin.vst3/Contents/MacOS/plugin -o plugin.vst3.dSYM`, e.g.

- Add a post-build step to strip the symbols using `strip -x plugin.vst3/Contents/MacOS/plugin`, e.g.

---

<div class="post-metadata">

**Author:** ![ttg](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/ttg/32/14456_2.png) [@ttg](https://forum.juce.com/u/ttg)\
**Post date:** [September 22, 2021, 1:55pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/11 "2021-09-22T13:55:46Z")

</div>

btw, sadly due to other tasks I’m not getting this project update.

but if anyone ever updates the repo above, feel free to PR.  
I do hope to update it and also add `CMakeFiles`, Linux (Ubuntu) and other steps currently not up-to-date.

---

<div class="post-metadata">

**Author:** ![goodhertz](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/goodhertz/32/74_2.png) [@goodhertz](https://forum.juce.com/u/goodhertz)\
**Post date:** [November 3, 2021, 6:04pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/12 "2021-11-03T18:04:08Z")

</div>

Does anyone know what DIE stands for in `could not find referenced DIE`?

Having trouble searching for this warning / guessing exactly what is failing.

---

<div class="post-metadata">

**Author:** ![reuk](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/reuk/32/21494_2.png) [@reuk](https://forum.juce.com/u/reuk)\
**Post date:** [November 3, 2021, 6:37pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/13 "2021-11-03T18:37:19Z")

</div>

It’s a “Debug Info Entry”. I think it suggests that the linker is not finding some debug information that it expected to find.

---

<div class="post-metadata">

**Author:** ![goodhertz](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/goodhertz/32/74_2.png) [@goodhertz](https://forum.juce.com/u/goodhertz)\
**Post date:** [November 3, 2021, 6:38pm UTC](https://forum.juce.com/t/guide-symbolicating-release-builds/27151/14 "2021-11-03T18:38:01Z")

</div>

Thanks!
