| 612 | } |
| 613 | |
| 614 | remote_addr_t |
| 615 | AbstractProcessManager::findInterpreterStateFromSymbols() const |
| 616 | { |
| 617 | LOG(INFO) << "Trying to find PyInterpreterState with symbols"; |
| 618 | |
| 619 | remote_addr_t pyruntime = findSymbol("_PyRuntime"); |
| 620 | if (pyruntime) { |
| 621 | return findInterpreterStateFromPyRuntime(pyruntime); |
| 622 | } |
| 623 | |
| 624 | // Older versions have a pointer to PyinterpreterState in "interp_head" |
| 625 | remote_addr_t interp_head = findSymbol("interp_head"); |
| 626 | if (interp_head) { |
| 627 | return findInterpreterStateFromPointer(interp_head); |
| 628 | } |
| 629 | return 0; |
| 630 | } |
| 631 | |
| 632 | std::vector<NativeFrame> |
| 633 | AbstractProcessManager::unwindThread(pid_t tid) const |