Chromium Code Reviews| 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:]) |