Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Unified Diff: tracing/bin/symbolize_trace.py

Issue 2950723002: Add an end-to-end test for symbolize_trace on macOS. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« tracing/bin/run_symbolize_trace_tests ('K') | « tracing/bin/symbolize_trace ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tracing/bin/symbolize_trace.py
diff --git a/tracing/bin/symbolize_trace b/tracing/bin/symbolize_trace.py
similarity index 97%
rename from tracing/bin/symbolize_trace
rename to tracing/bin/symbolize_trace.py
index 50bb2c5c69edd3b856b7a71f9946215d764dfc40..c0792b7ff7536a01208e4d65e54b2ea87332a268 100755
--- a/tracing/bin/symbolize_trace
+++ b/tracing/bin/symbolize_trace.py
@@ -985,6 +985,7 @@ class SymbolizableFile(object):
self.path = file_path
self.symbolizable_path = file_path # path to use for symbolization
self.frames_by_address = collections.defaultdict(list)
+ self.skip_symbolization = False
def ResolveSymbolizableFiles(processes):
@@ -1066,6 +1067,14 @@ class Symbolizer(object):
def _SymbolizeMac(self, symfile):
+ if symfile.skip_symbolization:
+ for address, frames in symfile.frames_by_address.iteritems():
+ unsymbolized_name = ('<' + symfile.symbolizable_path + '> + ' +
etienneb 2017/06/20 03:28:09 I wonder if we should not use only basename instea
erikchen 2017/06/23 00:33:45 Done.
+ str(address))
+ for frame in frames:
+ frame.name = unsymbolized_name
+ return
+
load_address = (symbolize_trace_macho_reader.
ReadMachOTextLoadAddress(symfile.symbolizable_path))
assert load_address is not None
@@ -1102,6 +1111,14 @@ class Symbolizer(object):
just one symbolizer seems good enough for now. Can optimize later
if this becomes a bottleneck.
"""
+ if symfile.skip_symbolization:
+ for address, frames in symfile.frames_by_address.iteritems():
+ unsymbolized_name = ('<' + symfile.symbolizable_path + '> + ' +
+ str(address))
etienneb 2017/06/20 03:28:09 nit: address should be hexa!?
erikchen 2017/06/23 00:33:45 Done.
+ for frame in frames:
+ frame.name = unsymbolized_name
+ return
+
cmd = [self.symbolizer_path, '--functions', '--demangle', '--exe',
symfile.symbolizable_path]
@@ -1212,7 +1229,8 @@ def RemapAndroidFiles(symfiles, output_path):
symfile.symbolizable_path = 'android://{}'.format(symfile.path)
-def RemapMacFiles(symfiles, symbol_base_directory, version):
+def RemapMacFiles(symfiles, symbol_base_directory, version,
+ only_symbolize_chrome_symbols):
suffix = ("Google Chrome Framework.dSYM/Contents/Resources/DWARF/"
"Google Chrome Framework")
symbol_sub_dir = os.path.join(symbol_base_directory, version)
@@ -1221,8 +1239,11 @@ def RemapMacFiles(symfiles, symbol_base_directory, version):
for symfile in symfiles:
if symfile.path.endswith("Google Chrome Framework"):
symfile.symbolizable_path = symbolizable_path
+ elif only_symbolize_chrome_symbols:
+ symfile.skip_symbolization = True
-def RemapWinFiles(symfiles, symbol_base_directory, version, is64bit):
+def RemapWinFiles(symfiles, symbol_base_directory, version, is64bit,
+ only_symbolize_chrome_symbols):
folder = "win64" if is64bit else "win"
symbol_sub_dir = os.path.join(symbol_base_directory,
"chrome-" + folder + "-" + version)
@@ -1231,6 +1252,8 @@ def RemapWinFiles(symfiles, symbol_base_directory, version, is64bit):
symbols = image + ".pdb"
if os.path.isfile(image) and os.path.isfile(symbols):
symfile.symbolizable_path = image
+ elif only_symbolize_chrome_symbols:
+ symfile.skip_symbolization = True
def Symbolize(options, trace, symbolizer):
symfiles = ResolveSymbolizableFiles(trace.processes)
@@ -1246,10 +1269,11 @@ def Symbolize(options, trace, symbolizer):
if not trace.is_chromium:
if symbolizer.is_mac:
- RemapMacFiles(symfiles, options.symbol_base_directory, trace.version)
+ RemapMacFiles(symfiles, options.symbol_base_directory, trace.version,
+ options.only_symbolize_chrome_symbols)
if symbolizer.is_win:
RemapWinFiles(symfiles, options.symbol_base_directory, trace.version,
- trace.is_64bit)
+ trace.is_64bit, options.only_symbolize_chrome_symbols)
SymbolizeFiles(symfiles, symbolizer)
@@ -1338,7 +1362,7 @@ def FetchAndExtractSymbolsWin(symbol_base_directory, version, is64bit):
# Suffix used for backup files.
BACKUP_FILE_TAG = '.BACKUP'
-def main():
+def main(args):
parser = argparse.ArgumentParser()
parser.add_argument(
'file',
@@ -1352,6 +1376,11 @@ def main():
'--output-directory',
help='The path to the build output directory, such as out/Debug.')
+ parser.add_argument(
etienneb 2017/06/20 03:28:09 For not chromium trace (traces from user computers
erikchen 2017/06/23 00:33:45 Done.
+ '--only-symbolize-chrome-symbols',
+ action='store_true',
+ help='Prevents symbolization of non-Chrome [system] symbols.')
+
home_dir = os.path.expanduser('~')
default_dir = os.path.join(home_dir, "symbols")
parser.add_argument(
@@ -1363,7 +1392,7 @@ def main():
if symbolizer.symbolizer_path is None:
sys.exit("Can't symbolize - no %s in PATH." % symbolizer.binary)
- options = parser.parse_args()
+ options = parser.parse_args(args)
trace_file_path = options.file
@@ -1410,4 +1439,4 @@ def main():
if __name__ == '__main__':
- main()
+ main(sys.argv[1:])
« tracing/bin/run_symbolize_trace_tests ('K') | « tracing/bin/symbolize_trace ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698