Why do I see "stack corruption" and "???" in my NDK stack trace?

You may encounter a situation in which you see crashes resembling the following:


This is because the correct symbols to properly symbolicate this crash have not been uploaded. Apteligent needs both the system symbols as well as the app symbols in order to properly symbolicate a crash. In iOS, getting both of these is easy since there is only one manufacturer. For Android, because it is a much more complex environment with hundreds if not thousands of manufacturers, this can be a little harder. 

For example, if the crash took place in libc and is the same as the one in the Android open source project, then Apteligent is capable of finding the symbols. However if that libc is different (say from Samsung), then Apteligent does not have the resources for it. 

For this particular NDK crash example above, Apteligent has addresses in memory (pointers) and needs to convert them to the names of the functions in order to generate the stack trace. For this to work Apteligent need the customer's symbol file for their app as well as the system symbols. When the symbol files are not uploaded, Apteligent has only the pointers in the stack, and is unable to translate them to meaningful names (due to Breakpad stackwalking behavior). In this case, "???" is used. 

The solution is to provide both the system symbol as well as the app symbol in order for Apteligent to properly symbolicate.

Have more questions? Submit a request


Article is closed for comments.