Browse Source

Added demangling for system frames and trim symbols

Armin Ronacher 9 years ago
parent
commit
c848a78756
2 changed files with 14 additions and 4 deletions
  1. 1 1
      setup.py
  2. 13 3
      src/sentry/lang/native/symbolizer.py

+ 1 - 1
setup.py

@@ -135,7 +135,7 @@ install_requires = [
 ]
 
 dsym_requires = [
-    'symsynd>=0.4.0,<1.0.0',
+    'symsynd>=0.5.0,<1.0.0',
 ]
 
 

+ 13 - 3
src/sentry/lang/native/symbolizer.py

@@ -2,6 +2,7 @@ try:
     from symsynd.driver import Driver
     from symsynd.report import ReportSymbolizer
     from symsynd.macho.arch import get_cpu_name
+    from symsynd.demangle import demangle_symbol
     have_symsynd = True
 except ImportError:
     have_symsynd = False
@@ -9,6 +10,7 @@ except ImportError:
 from django.db import connection
 from sentry import options
 from sentry.lang.native.dsymcache import dsymcache
+from sentry.utils.safe import trim
 
 
 SDK_MAPPING = {
@@ -16,6 +18,12 @@ SDK_MAPPING = {
 }
 
 
+def trim_frame(frame):
+    frame['symbol_name'] = trim(frame.get('symbol_name'), 1024)
+    frame['filename'] = trim(frame.get('filename'), 512)
+    return frame
+
+
 def get_sdk_from_system_info(info):
     if not info:
         return None
@@ -140,7 +148,7 @@ class Symbolizer(object):
         # Step one: try to symbolize with cached dsym files.
         new_frame = self.symsynd_symbolizer.symbolize_frame(frame)
         if new_frame is not None:
-            return new_frame
+            return trim_frame(new_frame)
 
         # If that does not work, look up system symbols.
         img = self.images.get(frame['object_addr'])
@@ -148,8 +156,10 @@ class Symbolizer(object):
             symbol = find_system_symbol(img, frame['instruction_addr'],
                                         system_info)
             if symbol is not None:
-                return dict(frame, symbol_name=symbol, filename=None,
-                            line=0, column=0, uuid=img['uuid'])
+                symbol = demangle_symbol(symbol) or symbol
+                rv = dict(frame, symbol_name=symbol, filename=None,
+                          line=0, column=0, uuid=img['uuid'])
+                return trim_frame(rv)
 
     def symbolize_backtrace(self, backtrace, system_info=None):
         rv = []