# Crasheye Common Problem

# Android

# Q: When will the symbol file be generated?

A: Every time it is compiled, a brand-new symbol file will be generated. In the Android platform, the target file corresponds to the SO file. Every time you build or release the APP version, be sure to back up the symbol file, or upload the symbol file automaticallyThe automatic upload method can be viewed in Q3

# Q: Symbol file path location?

A: Usually game projects need to upload the so compiled by the project (if there is c ++ code, you also need to upload the so compiled by c ++), and libunity.so

In the project, there are xx.sym.so or xxx.dbg.so or xxx.so these symbol files uuid is the same, usually recommended to upload xxx.dbg.so
The location of the symbol file is usually:
il2cpp

  • libunity.so (If there is no recompilation engine, the default is in the following directory of the editor)
  • libil2cpp.so (packaged in the project's own build temp directory)

il2cpp Release(armeabi-v7a)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\armeabi-v7a\libunity.sym.so

il2cpp Development(armeabi-v7a)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Symbols\x86\libunity.sym.so

il2cpp Release(x86)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\x86\libunity.sym.so

il2cpp Development(x86)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Symbols\x86\libunity.sym.so

MONO

Mono symbol files to upload

  • libunity.so (If there is no recompilation engine, the default is in the following directory of the editor)
  • libmono.so (If the editing mono is not reproduced, the default is in the following directory of the editor)

Release(armeabi-v7a)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a\libunity.sym.so

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\MonoLibs\armeabi-v7a\libmono.so

Release(x86)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\x86\libunity.sym.so

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\MonoLibs\x86\libmono.so

Development(armeabi-v7a)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Symbols\armeabi-v7a\libunity.sym.so

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\MonoLibs\armeabi-v7a\libmono.so

Development(x86)Version

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Symbols\x86\libunity.sym.so

\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\MonoLibs\x86\libmono.so

Attention!!!

  1. If strip engine code is checked, Creat S ymbol.zip must be checked. After the project is packaged, the symbol zip and libunity.sowill be generated, otherwise there will be no symbol file generated!!!



# Q: Do symbol files have to be uploaded every time? How to do automatic upload

A: In order to easily retrieve the Debug SO file corresponding to Crash and restore the stack, every time you build or release the APP version, you must backup the symbol file, or upload the symbol file automatically. Once the symbol file cannot be retrieved, the stack will not be restored!!!
Symbol file automatic upload method:

  • Build scripts are uploaded using the symbol file tool

Upload in build script using symbol file tool

Attention!!!

  1. Upload xx.sym.so or xxx.dbg.so !!! Must!!! Rename, rename rules: xxx.sym.so - > xxx.so , xxx.dbg.so - > xxx.so and then upload. ( If you run the command line without renaming, the analysis background will not match the symbol)

  2. If the strip engine code is checked, Creat S ymbol.zip must be checked. After the project is packaged, the symbol zip and libunity.so will be generated, otherwise there will be no symbol file generated!!!

# Q: The platform display symbol file uuid has one more 0 than the local symbol file uuid, why?

A: Crasheye inside uuid calculation and buildid is somewhat different, the last bit will add a 0, does not affect the symbol file matching

# Q: What is the uuid of the symbol file?

A: The build id of the elf file, each compilation generates a unique ID

# Q: The log interface was called, but the previous log was not collected

A: Are there READ_LOGS permissions in the manifest

# Q: Android did not report the dump after triggering it, but why did it not receive the crash?

A:Follow the following steps to check

  1. Check the log to confirm that Crasheye init succeeded
  2. After triggering the crash, whether to restart the game, dump will be reported after restarting the game, usually within 10min
  3. Confirm whether android initialization is in the java layer, hit the java package method, see Android initialization

A: Troubleshooting:

  1. In this case, it should be an initialization error, and the initialization related to Crasheye NDK should be called: For details, refer toAndroid NDK Access guide

    Crasheye.initWithNativeHandle(this, "Your_Appkey");

  2. Different project engines have different exclusion methods. There are corresponding log outputs in Logcat. For example, when the engine uses Cocos2d, check the logcat initialization log.:

Check if there is the above NDK initialization information, if not, it means the NDK has not been initialized successfully, please refer to the first step to re-initialize;
3. Please don't add Crasheye to code obfuscation;
4. If the project's so is also obfuscated, Crasheye cannot capture the downtime of NDK;

# Q: Some models cannot catch NDK exceptions in versions after Android 5.0?

A: The version of libCrasheyeNDK.so is too old, and the latest version of so on the official website can be successfully captured NDK download

# After connecting to the Unity SDK, why is the initialization prompt mono signal chain fail?

A: This Error does not affect the access of Crasheye, just ignore it

# Q: The page stack is not parsed, what is the reason?

A: Please check according to the following methods

  • Symbol file not uploaded

    Page prompt module "symbol file name" uuid "symbol file uuid" is missing

  1. Click re-analyze, if the page is still missing prompt, proceed to step 2 troubleshooting
  2. In Settings-symbol file, page, according to uuid , search whether the symbol file exists, the symbol file name, and whether it matches exactly
  3. If the symbol file does not exist, look for the symbol file on the builder and upload it again
  • Stack corruption

Page prompt module "symbol file name" uuid "symbol file uuid" is corrupt, the underlying breakpad can not be parsed, this crash whether Crasheye or the user can not do any processing, usually this crash can still parse part of the stack, the user can according to the limited stack, crash analysis. More explanations can be seen:

Heap corruption occurs when dynamic allocation of memory is not handled properly. Typical heap corruption problems are reading, or writing outside of the bounds of allocated memory, or double-freeing memory. Since the result (e.g. a hard crash) can happen later, when the program tries to manipulate the incorrectly allocated piece of memory, the root cause of the issue can remain hidden from your eyes.

  • First trigger the crash, then upload the crash, click on the re-analysis

The service will not monitor the upload of symbol files, so the crash will be triggered first, and then the upload crash, and the page stack will not be parsed. At this time, you need to click Reanalyze, and the stack will be re-parsed

# Q: How to get Lua's script exception?

A:call the API after initialization to capture script exceptions (such as null pointers, etc.), Android, iOS , Unity plug-ins all support capturing script exceptions, see the common API for specific access

In order to reduce repeated reporting, the same abnormal information can only be reported once within 10 minutes

# Q: Can stack parsing locate line numbers?

A: Some can locate the line number, some cannot.
Not all stacks can parse the travel number, and specific analysis of specific problems is required.
If the symbol file has been uploaded and you have clicked Reanalyze, you can view the parsed stack

# iOS

# Q: What is a dSYM file?

  A: In iOS, the dSYM file refers to the target file with debugging information, and the file name is usually: xxx.app.dSYM
  Under normal circumstances, the dSYM file and the app file are in the same directory after the project is compiled
XCode -> Project -> Products -> XXX.app -> Right click"Show folder" -> XXX.app.dSYM
  To ensure that the stack information can be restored, It is recommended to back up the dSYM file every time you build or release a version

# Q: Symbol file tool upload error dump_syms command is exception,How to deal with it?

  dump_syms does not have access rights, to execute the followingchmod a+x dump_symsThis executable。

There is < Error>: + [NSString ksgIsNilOrEmpty:]: unrecognized selector in the logging output after my application interfaced with Crasheye and crashed on startup. What does it mean?

A: Check if you didn’t add –ObjC setting in Linker Flags. (Refer to:iOS SDK Integration)

# Q: Where are the crash files located?

A: Location: Library/Caches/Crasheye.

# Q: Why there is no crash files after a crash?

A: First, please check the logs and see if Crasheye has been initialized correctly.
Second, please check whether your device is connected to debugger. No crash file will be created when cell phone is being connected to debugger.

# Q: Why there is no records on the website after a crash?

A: Crash files will not be uploaded until the application is restarted.

# Q: Why does iOS not report after triggering the dump, but not receiving the crash?

A:Follow the steps below to troubleshoot

  1. Check the log to confirm the success of Crasheye init
  2. Crasheye does not collect sigkill, memory downtime, and infinite recursive downtime. If the downtime type is these types, it will not be reported.
  3. After the crash is triggered, whether to restart the game or not, the dump will be reported after restarting the game, usually within 10 minutes.
  4. Confirm whether it is in the debug state, the dump is not captured in the debug state, and do not connect to the debugger (xcode) when testing

# Unity

# Q: UnityWhere is the project symbol file?

MONO
mono symbol file to be uploaded

  • libunity.so (If the engine is not recompiled, it will default to the following directory of the editor)
  • libmono.so (If you do not edit mono again, it will default to the following directory of the editor)

Release(armeabi-v7a)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\armeabi-v7a\libunity.sym.so
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\MonoLibs\armeabi-v7a\libmono.so

Release(x86)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Symbols\x86\libunity.sym.so
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\MonoLibs\x86\libmono.so

Development(armeabi-v7a)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Symbols\armeabi-v7a\libunity.sym.so
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\MonoLibs\armeabi-v7a\libmono.so

Development(x86)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\Symbols\x86\libunity.sym.so
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Development\MonoLibs\x86\libmono.so

il2cpp

il2cpp need to upload symbol files

  • libunity.so (If the engine is not recompiled, it will default to the following directory of the editor)
  • libil2cpp.so (After packaging, in the project's own build temporary directory)

il2cpp Release(armeabi-v7a)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\armeabi-v7a\libunity.sym.so

il2cpp Development(armeabi-v7a)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Symbols\x86\libunity.sym.so

il2cpp Release(x86)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\x86\libunity.sym.so

il2cpp Development(x86)Version
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Symbols\x86\libunity.sym.so

If striped is checked, then you need to check create symbols.zip when packaging, there will be symbol files in it, and you can no longer go to the engine directory to get it. After striped, so even the buildid has changed。
Other third-party library symbol files can be uploaded according to application requirements

# Q: Why the script exceptions are not caught?

A: Troubleshooting:

    1. If Try..catch statement is used in the outermost layer of application, exceptions will be caught by try..catch statement instead of Crasheye.
    1. Check if Application.RegisterLogCallback function is used anywhere else in your application. If yes, please replace it with Crasheye.SetRegisterLogFunction as instructed in the Help file
    1. Make sure you initialize Crasheye.cs in the entry function of the program.

# Q: What are the benefits of using MONO to interface Unity game with Crasheye?

A: Some C# related stack trace of NDK crash will be displayed as follows:

# Q: How to use Unity plugin to search NDK stack trace details?

A: Pleas upload the symbol file in Unity plugin, including libmain.so, libunity.so and libmono.so, to Crasheye, Crasheye will automatically re-analysis, wait a moment to view the NDK stack detail;

# Symbol File

# Q: What is symbol table? What is it used for?

A: Symbol table maps memory address to function name, file name, and line number. In order to locate the statement which causes app crash, Crasheye uses symbol table to analyze and restore stack trace of the code.

# Q: Is a symbol table mandatory? When should we configure a symbol table?

A: It is optional and it will not affect exception reporting. However, we recommend you to configure it.

Android( Java & NDK )symbol table configuration guideline
iOS symbol table configuration guideline

# Q: Why there is no detailed stack trace analysis after crashes while symbol file has been successfully uploaded?

A: Refresh page, See if the uuid in the pop-up notification at the head of the Crash Detail page matches any file in the uploaded files (Settings -> Symbols -> The Uploaded Files).

# Q: Does the uploaded symbol file have size limit?

A: The maximum size of a single file is 1G when using the upload tool. There is no limit if you use our website to upload symbol files. Please rest assured.

# Q: There is a message “run lipo -info false” when uploading files for iOS app. Is there something wrong?

A: Troubleshooting:

  1. Check if you use the correct symbol file upload tool. The symbol file upload tool for iOS application is iOS.jar while the symbol file upload tool is Android.jar.
  2. The path of symbol files do not support space. If there is space in the path, please delete it.

# Crasheye Backstage

# Q: How to add members ?

A: Step 1: In the Crasheye platform mouse into the left menu bar to select therights management platform (opens new window)

Step 2: Switch member management, click Add, search for project members and select user group information through Email, Email separated by English commas can add multiple members at the same time, click Save to add successfully

Non-administrator permissions, unable to add members, you can consult the administrator of the corresponding project to add

# Q: How to create AppKey?

A:Step 1: In the Crasheye platform mouse into the left menu bar to select therights management platform (opens new window)

Step 2: Switch to the project information, click Add, fill in the application name (usually recommended to fill in the region) , select the platform, and the system will automatically generate AppKey after confirmation

# Q: How to alarm ?

A: In theCrasheye platform (opens new window) settings-monitoring settings-alarm settings click to add alarm rules

After the alarm rules are met, the number of times the app is used must be > 0 to trigger an alarm, and the project will (with the AppKey as the unique identifier) ​​within 24 hours from this moment (crash count, crash rate, number of affected users, and rate of affected users), Send alert emails with no upper limit.

same crash problem:

  • When the alarm is triggered for the first time, the alarm email will be received within about 10min - 30min;

  • When the alarm threshold is reached again (the value compared with the last time remains unchanged, no alarm is triggered), the second email will be sent after 1 hour;

  • The service verifies the alarm rules every 10 minutes or so. If the mail service fails to receive the alarm, it will retry once every 0.5 minutes. If the retry fails, an exception will be thrown, and if it reaches 3 times, the retry will be stopped, and the result will be recorded in the log.

Monitor item

  • Specify version: Specify a version number and report the crash trigger alarm rule; When multiple version numbers are specified, any version satisfies the alarm rule and triggers an alarm .

  • All versions: All versions meet the alarm rules and trigger the alarm.

  • Single version: Any version satisfies the alarm rule and triggers the alarm .

  • Single crash problem: When a crash problem, the number of crashes exceeds x, an alarm is triggered

Monitoring indicators

  • Crash rate (recommended): Crash rate (%) = number of crashes/number of uses, keep 1 decimal point

  • Affected user rate (recommended): Affected user rate (%) = number of affected users/number of users, keep 1 decimal point

  • Number of crashes: the number of crashes that occurred using the app, integer

  • Number of affected users: a device has multiple crashes, counted as a number of affected users, integer

# Q: How to upgrade crasheye background?

In order to further improve the user experience and system service performance, the Crasheye background will be upgraded to the new version, and the old data will not be affected

The old version will also stop the entry of permission management

Note: Only the moderator permission can be upgraded

After submission, the project will complete the upgrade

# Q: Do we need to pay for Crasheye services?

A: It is free for good. Please rest assured.

# Q: Does Crasheye collet other information? If so, what data does it collect?

A: All the collected data are related to crashes. Crasheye shows developers the circumstance under which crash arises, and does not collect personal information. Furthermore, the results are only accessible to project members.

Regular collected information including:
Environment: crash information and stack trace, ROM/RAM, network condition, and system language etc.
App information: package name, version, and process name
Device information: device model, operating system, and resolution
Developers can print out the uploaded logs to check all details.

# Q: Is it open to the project which has not been online yet?

A: Yes, it is.

# Q: Will there be conflicts if we build Crasheye and another third party SDK at the same time?

A: There might be conflicts in this situation. You can contact with Crasheye or the third party SDK official staff for solutions.

# Q: Will there be conflicts if we use Crasheye and another similar SDK at the same time?

A: No. However, we recommend you to initialize Crasheye after initializing other SDKs..

# Q: Will Crasheye slow down the application running speed?

A: Barely no influence. Only when application starts, Crasheye checks whether there is crash information to upload or not. Crash information will be compressed and uploaded if needed, and the application will not be affected.

# Q: How much is the cellular data usage of Crasheye?

A: Reports can be uploaded only through wifi by configuring a specific interface. Crash files will be saved to local device when the device is not on wifi networks, and the files will be uploaded after the cell phone restores wifi connection.

# Q: Will the submission to app store be affected because of interfacing with Crasheye? (iOS)

A: No.

# Q: What developer-defined functionality does Crasheye support?

A: Crasheye supports multiple function control interfaces and information collecting API:

Android Api Guideline
iOS Api Guideline

# Q: How to change the login account in Crasheye?

A: If you are the account owner and cannot unbind your account with an app, you should use a business Email account instead of a personal Email account to create apps next time.
If you are not the account owner, you can contact with the account owner to unbind it.

# Q: How does the interfacing with Crasheye impact the memory usage and CPU usage of the application?

A: Interfacing with Crasheye has no obvious impact on the application. The memory usage increases only 0.86MB and CPU peak stays at 1% after the interfacing.
     How we test: We used TestPlus (opens new window) (a client-side performance testing tool) to test an application at least 3 times before and after interfacing with Crasheye. Each test were more than 30 seconds, and we gathered the statistics to get the average values.     
     The results are as follows:

Without Crasheye With Crasheye Increase
Memory 32.81MB 33.67MB 0.86MB
CPU Peak 1% 1% 0%

Testing device: RedMi Note3

# Q: We’ve interfaced our application with Crasheye. Why does the website show that Crasheye didn't interface with the application?

A: Troubleshooting: Step1: check if the internet permission is added.

< uses-permission android:name="android.permission.INTERNET"/>

Step2: Search this string in Logcat (Active reporting);

NetSender: Sending data to url: http://rp.crasheye.cn/session (opens new window)

Step3: Check if the following line is in the search results.

NetSender: Transmitting result {"ret":0,"msg":"","data":{"appkeyvalid":true}}

If the 3 steps above don’t work, please re-interface as instructed in the Help file or contact the official staff.

# Q: Why did the crash rate of my application exceed 100%?

A: There can be two possible reasons:

  1. The app crashed instantly when it started and Crasheye captured the crashes, but the session didn’t successfully start. Because the crash stack trace that was failed to upload were cached and the session were not cached, many crashes and only one session would be uploaded in one report. Under this circumstance, the number of crashes would exceed the number of sessions and thus the crash rate would be over 100%.

  2. If Crasheye was initialized in Service in the application, when Service crashed Crasheye would report those crash issues to the server. It would not restart session when restarting Service and the Mainactivity didn’t crash at that time. Under this circumstance, if a number of crashes occurred in Service, the number of crashes would exceed the number of sessions. Therefore, the crash rate that exceeds 100% is normal if you initialize Crasheye in Service.

ps: Why doesn't Crasheye start sessions in Service? As far as I am concerned, Crashes in Service have no negative impact on main activity. Besides, Mainactivity can start Service at any time, and only sessions started by users should be counted in the number of sessions. Therefore, we recommend not to initialize Crasheye in Service.

# Q: How to match a crash information to a specific cellphone on the website?

A: There are two ways to get the crash information of your device:

Method 1: filter crash information via uid.
a. Connect your cell phone to computer and find out the value of uid in LogCat, then you can filter crashes by uid on the website.

b. Take the following uid as an example: 69d86f0988d898df246e36071bb02baa

Crash number 950 is what we are looking for.

Method 2: filter crash information via User identifier.
a. User identifier is defined when initializing Crasheye.
(refer to Common APIs: User identifier
b. If you have your User identifier as UserByCQF, you can search it like this:

All UserByCQF related crashes will be listed on the website.

Last Updated: 11/23/2022, 4:09:10 PM