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:]) |