skip to main content
research-article

Interacting with dead objects

Published:29 October 2013Publication History
Skip Abstract Section

Abstract

Debugging and analyzing a snapshot of a crashed program's memory is far more difficult than working with a live program, because debuggers can no longer execute code to help make sense of the program state. We present an architecture that supports the restricted execution of ordinary code starting from the snapshot, as if the dead objects within it had been restored, but without access to their original external environment. We demonstrate the feasibility of this approach via an implementation for Java that does not require a custom virtual machine, show that it performs competitively with live execution, and use it to diagnose an unresolved memory leak in a mature mainstream application.

References

  1. Clozure cl documentation - 4.9. saving applications. http://ccl.clozure.com/manual/chapter4.9.html#Saving-Applications.Google ScholarGoogle Scholar
  2. Eclipse memory analyzer open source project. http://www.eclipse.org/mat/.Google ScholarGoogle Scholar
  3. B. Alpern, S. Augart, S. Blackburn, M. Butrico, A. Cocchi, P. Cheng, J. Dolby, S. Fink, D. Grove, M. Hind, et al. The jikes research virtual machine project: building an open-source research community. phIBM Systems Journal, 44 (2): 399--417, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. T. Austin, T. Disney, and C. Flanagan. Virtual values for language extension. In phOOPSLA, pages 921--938. 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. G. Bracha and D. Ungar. Mirrors: design principles for meta-level facilities of object-oriented programming languages. In phOOPSLA, pages 331--344. ACM, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. E. Bruneton, R. Lenglet, and T. Coupaye. ASM: a code manipulation tool to implement adaptable systems. In phAdaptable and extensible component systems, 2002.Google ScholarGoogle Scholar
  7. P. Cousot and R. Cousot. Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints. In phPOPL, pages 238--252, 1977. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. M. Factor, A. Schuster, and K. Shagin. Instrumentation of standard libraries in object-oriented languages: the twin class hierarchy approach. In phOOPSLA, pages 288--300, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. O. Gruber, B. Hargrave, J. McAffer, P. Rapicault, and T. Watson. The eclipse 3.0 platform: adopting osgi technology. phIBM Systems Journal, 44 (2): 289--299, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. J. Huang and C. Zhang. Lean: simplifying concurrency bug reproduction via replay-supported execution reduction. In phOOPSLA, pages 451--466, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. J. Huang, P. Liu, and C. Zhang. LEAP: lightweight deterministic multi-processor replay of concurrent java programs. In phFSE, pages 207--216, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. D. Kozen and M. Stillerman. Eager class initialization for java. In phFTRTFT, pages 71--80, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. D. H. Lorenz and J. Vlissides. Pluggable reflection: decoupling meta-interface and implementation. In phICSE, pages 3-- 13, May 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. E. K. Maxwell, G. Back, and N. Ramakrishnan. Diagnosing memory leaks using graph mining on heap dumps. In phKDD, pages 115--124, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. S. Mostinckx, T. Van Cutsem, S. Timbermont, and E. Tanter. Mirages: Behavioral intercession in a mirror-based architecture. In phDLS, pages 89--100, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Oracle. Java platform debugger architecture. http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/index.html.Google ScholarGoogle Scholar
  17. G. Pothier and É. Tanter. Summarized trace indexing and querying for scalable back-in-time debugging. In phECOOP, pages 558--582, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. G. Xu, A. Rountev, Y. Tang, and F. Qin. Efficient checkpointing of java software using context-sensitive capture and replay. In phESEC-FSE, pages 85--94, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Z. Yang, M. Yang, L. Xu, H. Chen, and B. Zang. ORDER: object centric deterministic replay for java. In phUSENIX, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Interacting with dead objects

    Recommendations

    Comments

    Login options

    Check if you have access through your login credentials or your institution to get full access on this article.

    Sign in

    Full Access

    PDF Format

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader
    About Cookies On This Site

    We use cookies to ensure that we give you the best experience on our website.

    Learn more

    Got it!