Open justintoth opened 7 years ago
@justintoth Thanks for the report. First of all, lets make sure the service is running properly.
Can you install Postman (or similar) and submit a request to http://localhost:5000/symbolicate (like I show in the README)?
It should give you back the clean stack trace. If so, then we know it is finding the Archives and running the command properly.
NOTE: Those Java files are part of the actual stack trace, since they come from the JVM, not the .NET side, so those are not part of the mono-symbolicate process.
Now check the Chrome dev console for the extension (you can inspect the background page from the Extensions list). See if there are any errors. Also press F12 on the HockeyApp page to see if there are any errors from the content script.
When running in postman, it gives back the stack trace but with all 0's for the line numbers.
So the issue seems to be related to the helper (or something in my environment), rather than with the chrome extension.
What that usually means is that it couldn't find the symbols for that specific versionCode.
If you look through the Archives folder, you'll see that there are folders by date. Then there is a folder for each app build. If you open that, you'll see a file named archive.xml
. This contains the package name and version code for the build.
During startup, the helper service enumerates all these folders and creates a list of paths by package/version. When you call /symbolicate
, it will use the package and version to determine which mSYM path to pass to mono-symbolicate
.
Double-check to make sure you have an archive for the package and version you are passing.
Also, in your stack trace, the .NET entries are denoted by [entry] in <hash>:0
. Make sure you have a folder that corresponds with the <hash>
entry in the mSYM folder of the archive. This is what the mono-symbolicate
tool uses to get the correct symbols.
Hopefully we can figure out what's going on.
The archive.xml file matches up:
<?xml version="1.0" encoding="utf-8"?>
<Archive>
<Name>RPR Mobile</Name>
<PackageName>com.rpr.mobile</PackageName>
<PackageVersionCode>349</PackageVersionCode>
<PackageVersionName>1.64.03</PackageVersionName>
<CreationDate>636385047704908850</CreationDate>
<SolutionName>RPR Mobile - Android</SolutionName>
<SolutionPath>/Users/justintoth/Documents/rpr-mobile/RPR Mobile - Android.sln</SolutionPath>
<InsightsApiKey />
<Status></Status>
<Configuration>
<DebugMode>true</DebugMode>
</Configuration>
<Comment />
<LastUsedKeystore>/Users/justintoth/Library/Developer/Xamarin/Keystore/prod-key/prod-key.keystore</LastUsedKeystore>
<TimeStampingAuthority />
<LastInsightsUploadDate>0</LastInsightsUploadDate>
</Archive>
In the stack trace, the code lines related to my application have a hash of d69074b01bdc4aee9b338c440e2a3b69 . I'm not seeing a folder that has that hash...
Is it possible that you have 2 different builds of version 349? The service enumerates by folder name and last one it finds is the one it uses (overwrites previous entry in dictionary).
Try to search for the d69074b01bdc4aee9b338c440e2a3b69
folder and see if it can be found.
I have a Mac but haven't tried this there... when I get a chance I'll see if there's something different. Perhaps I'm making an assumption that works on Windows but not on the Mac.
That's the only 349 build. I double checked and the only folders in the Archives folder match up with the builds that I see in Visual Studio.
I tried searching in Finder for d69074b01bdc4aee9b338c440e2a3b69 and found nothing.
Ok, so did you enable the full symbols on the project prior to Aug 16, which is when 349 was built? Without the symbols on release builds, mono-symbolicate will be pretty useless. This is not enabled by default, and I don't think there's a UI for it yet. You have to manually update the .csproj file.
Yes, below is my PropertyGroup. I added the debug support on July 19. Do you think the capitalization could be an issue? MonoSymbolArchive is the only one that is capitalized in my config, I must've copy/pasted that from somewhere else.
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release-Prod|AnyCPU' ">
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<AndroidLinkSkip>System.Core;System.Runtime.Serialization;Android.Gms.Gcm</AndroidLinkSkip>
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;armeabi;x86;x86_64</AndroidSupportedAbis>
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
<AndroidLinkMode>SdkOnly</AndroidLinkMode>
<AndroidEnableMultiDex>true</AndroidEnableMultiDex>
<MonoSymbolArchive>True</MonoSymbolArchive>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>true</Optimize>
</PropertyGroup>
It's really hard to say. I would recommend that you go through the <hash>
folders and make sure that your app assembly is there. Xamarin will generate a separate folder for each assembly in your app.
Looks like I may have to build my sample app on the Mac and make sure everything is working end-to-end.
There are 16 hash folders for this version, 4 of which have my application's dll and pdb. The rest have either mono assemblies or my shared project assembly. I tried changing the hash in the exception stack trace to each of the 4 hash folders, however it still returned line numbers of 0 each time. Very strange that the hashes aren't matching up...
I updated the paths in the App.Config:
Then I ran the service through Visual Studio for Mac:
I believe the Chrome Extension is listening to the local service, as I see a thread start and finish in the logs every time I refresh a HockeyApp page. However, the lines of code within my application aren't showing up in the stack traces. The native Android lines of code are showing up, so that's a good first step.
Here is an example url:
https://rink.hockeyapp.net/manage/apps/77910/app_versions/318/crash_reasons/185330792?type=crashes
And here is the stack trace: