(self, addr, binary, offset)
| 370 | self.process_line = self.process_line_posix |
| 371 | |
| 372 | def symbolize_address(self, addr, binary, offset): |
| 373 | # On non-Darwin (i.e. on platforms without .dSYM debug info) always use |
| 374 | # a single symbolizer binary. |
| 375 | # On Darwin, if the dsym hint producer is present: |
| 376 | # 1. check whether we've seen this binary already; if so, |
| 377 | # use |llvm_symbolizers[binary]|, which has already loaded the debug |
| 378 | # info for this binary (might not be the case for |
| 379 | # |last_llvm_symbolizer|); |
| 380 | # 2. otherwise check if we've seen all the hints for this binary already; |
| 381 | # if so, reuse |last_llvm_symbolizer| which has the full set of hints; |
| 382 | # 3. otherwise create a new symbolizer and pass all currently known |
| 383 | # .dSYM hints to it. |
| 384 | if not binary in self.llvm_symbolizers: |
| 385 | use_new_symbolizer = True |
| 386 | if self.system == 'Darwin' and self.dsym_hint_producer: |
| 387 | dsym_hints_for_binary = set(self.dsym_hint_producer(binary)) |
| 388 | use_new_symbolizer = bool(dsym_hints_for_binary - self.dsym_hints) |
| 389 | self.dsym_hints |= dsym_hints_for_binary |
| 390 | if self.last_llvm_symbolizer and not use_new_symbolizer: |
| 391 | self.llvm_symbolizers[binary] = self.last_llvm_symbolizer |
| 392 | else: |
| 393 | self.last_llvm_symbolizer = LLVMSymbolizerFactory( |
| 394 | self.system, guess_arch(addr), self.dsym_hints) |
| 395 | self.llvm_symbolizers[binary] = self.last_llvm_symbolizer |
| 396 | # Use the chain of symbolizers: |
| 397 | # Breakpad symbolizer -> LLVM symbolizer -> addr2line/atos |
| 398 | # (fall back to next symbolizer if the previous one fails). |
| 399 | if not binary in symbolizers: |
| 400 | symbolizers[binary] = ChainSymbolizer( |
| 401 | [BreakpadSymbolizerFactory(binary), self.llvm_symbolizers[binary]]) |
| 402 | result = symbolizers[binary].symbolize(addr, binary, offset) |
| 403 | if result is None: |
| 404 | if not allow_system_symbolizer: |
| 405 | raise Exception('Failed to launch or use llvm-symbolizer.') |
| 406 | # Initialize system symbolizer only if other symbolizers failed. |
| 407 | symbolizers[binary].append_symbolizer( |
| 408 | SystemSymbolizerFactory(self.system, addr, binary)) |
| 409 | result = symbolizers[binary].symbolize(addr, binary, offset) |
| 410 | # The system symbolizer must produce some result. |
| 411 | assert result |
| 412 | return result |
| 413 | |
| 414 | def get_symbolized_lines(self, symbolized_lines): |
| 415 | if not symbolized_lines: |
no test coverage detected