teak-llvm/lldb/packages/Python/lldbsuite/test/functionalities/multidebugger_commands/TestMultipleDebuggersCommands.py
Enrico Granata 0a66e2f135 Fix an issue where certain CommandObjects (or Options thereof) were being created once, bound to a specific CommandInterpreter (and hence a specific Debugger), and then cached for reuse across different Debugger instances
Obviously, if the original Debugger goes away, those commands are holding on to now stale memory, which has the potential to cause crashes

Fixes rdar://24460882

llvm-svn: 259964
2016-02-06 00:43:07 +00:00

49 lines
1.7 KiB
Python

"""
Test that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario
"""
from __future__ import print_function
import os, time
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class MultipleDebuggersCommandsTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@no_debug_info_test
def test_multipledebuggers_commands(self):
"""Test that commands do not try and hold on to stale CommandInterpreters in a multiple debuggers scenario"""
source_init_files = False
magic_text = "The following built-in commands may relate to 'env'"
debugger_1 = lldb.SBDebugger.Create(source_init_files)
interpreter_1 = debugger_1.GetCommandInterpreter()
retobj = lldb.SBCommandReturnObject()
interpreter_1.HandleCommand("apropos env", retobj)
self.assertTrue(magic_text in str(retobj), "[interpreter_1]: the output does not contain the correct words")
if self.TraceOn(): print(str(retobj))
lldb.SBDebugger.Destroy(debugger_1)
# now do this again with a different debugger - we shouldn't crash
debugger_2 = lldb.SBDebugger.Create(source_init_files)
interpreter_2 = debugger_2.GetCommandInterpreter()
retobj = lldb.SBCommandReturnObject()
interpreter_2.HandleCommand("apropos env", retobj)
self.assertTrue(magic_text in str(retobj), "[interpreter_2]: the output does not contain the correct words")
if self.TraceOn(): print(str(retobj))
lldb.SBDebugger.Destroy(debugger_2)