[Lldb-commits] [lldb] r222163 - Complete rewrite of interactive editing support for single- and multi-line input.

Jason Molenda jason at molenda.com
Tue Nov 25 16:49:21 PST 2014


I think you should commit this patch.  I don't know this corner of the standard very well but if TOT is crashing for all Linux users, it'd be better to tentatively accept the change until Kate is back on-line next week.

J

> On Nov 25, 2014, at 5:58 AM, Abid, Hafiz <Hafiz_Abid at mentor.com> wrote:
> 
> Hi Kate,
> I observed that this change is causing crash on Linux whenever a confirmation is shown to the user (e.g. breakpoint delete or quit). I think the following code is responsible. It is casting this pointer in initializer list to a base class which is still not initialized.
> 
> IOHandlerConfirm::IOHandlerConfirm (Debugger &debugger,
>                                    const char *prompt,
>                                    bool default_response) :
>    IOHandlerEditline(debugger,
>                      IOHandler::Type::Confirm,
>                      NULL,     // NULL editline_name means no history loaded/saved
>                      NULL,     // No prompt
>                      NULL,     // No continuation prompt
>                      false,    // Multi-line
>                      false,    // Don't colorize the prompt (i.e. the confirm message.)
>                      0,
>                      *this),
>    m_default_response (default_response),
>    m_user_response (default_response)
> 
> If my reading of C++ standard is correct, the constructor of base classes are called in order in which they are declared (12.6.2 (10)). So *this is basically casting IOHandlerConfirm to its base IOHandlerDelegate and passing it to constructor of IOHandlerEditline which uses it and crashes as constructor of IOHandlerDelegate is still not called.
> 
> I changed the order of base classes in the declaration of IOHandlerConfirm and it seems to have fixed this issue. Please have a look at the attached patch and let me know if it looks ok to you.
> 
> Thanks,
> Abid
> 
> 
>> -----Original Message-----
>> From: lldb-commits-bounces at cs.uiuc.edu [mailto:lldb-commits-
>> bounces at cs.uiuc.edu] On Behalf Of Shawn Best
>> Sent: 18 November 2014 19:03
>> To: Ed Maste; Kate Stone
>> Cc: lldb-commits at cs.uiuc.edu
>> Subject: Re: [Lldb-commits] [lldb] r222163 - Complete rewrite of interactive
>> editing support for single- and multi-line input.
>> 
>> I can confirm the two issues you cite also started failing on linux around the
>> time of this changes. Greg's checkin yesterday fixed TestCommandRegex, but
>> TestGlobalVariables is still failing.
>> 
>> On 11/17/2014 11:46 AM, Ed Maste wrote:
>>> On 17 November 2014 14:07, Kate Stone <katherine.stone at apple.com>
>> wrote:
>>>> Author: kate
>>>> Date: Mon Nov 17 13:06:59 2014
>>>> New Revision: 222163
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=222163&view=rev
>>>> Log:
>>>> Complete rewrite of interactive editing support for single- and multi-line
>> input.
>>> FYI, two new test failures appeared on FreeBSD after this change. I'm
>>> curious if the Linux guys see similar behaviour.
>>> 
>>> 
>>> FAIL: LLDB (/usr/bin/clang-x86_64) :: test_with_dwarf
>>> (TestGlobalVariables.GlobalVariablesTestCase)
>>> 
>> ================================================================
>> ======
>>> FAIL: test_with_dwarf (TestGlobalVariables.GlobalVariablesTestCase)
>>>    Test 'frame variable --scope --no-args' which omits args and shows
>> scopes.
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>>   File "/tank/emaste/src/llvm/tools/lldb/test/lldbtest.py", line 382, in
>> wrapper
>>>     return func(self, *args, **kwargs)
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/lang/c/global_variables/TestGlo
>>> balVariables.py",
>>> line 24, in test_with_dwarf
>>>     self.global_variables()
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/lang/c/global_variables/TestGlo
>>> balVariables.py",
>>> line 60, in global_variables
>>>     'stop reason = breakpoint'])
>>>   File "/tank/emaste/src/llvm/tools/lldb/test/lldbtest.py", line 1886, in
>> expect
>>>     self.runCmd(str, msg=msg, trace = (True if trace else False),
>>> check = not error, inHistory=inHistory)
>>>   File "/tank/emaste/src/llvm/tools/lldb/test/lldbtest.py", line 1812, in
>> runCmd
>>>     msg if msg else CMD_MSG(cmd))
>>> AssertionError: False is not True : Process should be stopped due to
>>> breakpoint Config=x86_64-/usr/bin/clang
>>> ----------------------------------------------------------------------
>>> Ran 2 tests in 0.200s
>>> 
>>> FAILED (failures=1, skipped=1)
>>> 
>>> 
>>> FAIL: LLDB (/usr/bin/clang-x86_64) :: test_command_regex
>>> (TestCommandRegex.CommandRegexTestCase)
>>> 
>> ================================================================
>> ======
>>> ERROR: test_command_regex
>> (TestCommandRegex.CommandRegexTestCase)
>>>    Test a simple scenario of 'command regex' invocation and subsequent
>> use.
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/functionalities/command_regex/T
>>> estCommandRegex.py",
>>> line 38, in test_command_regex
>>>     child.expect('The following is a list of built-in, permanent
>>> debugger commands:')
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/pexpect-2.4/pexpect.py",
>>> line 1316, in expect
>>>     return self.expect_list(compiled_pattern_list, timeout,
>> searchwindowsize)
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/pexpect-2.4/pexpect.py",
>>> line 1330, in expect_list
>>>     return self.expect_loop(searcher_re(pattern_list), timeout,
>>> searchwindowsize)
>>>   File
>>> "/tank/emaste/src/llvm/tools/lldb/test/pexpect-2.4/pexpect.py",
>>> line 1414, in expect_loop
>>>     raise TIMEOUT (str(e) + '\n' + str(self))
>>> TIMEOUT: Timeout exceeded in read_nonblocking().
>>> _______________________________________________
>>> lldb-commits mailing list
>>> lldb-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>> 
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
> <IOHandler.patch>_______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits





More information about the lldb-commits mailing list