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

Abid, Hafiz Hafiz_Abid at mentor.com
Tue Nov 25 05:58:57 PST 2014


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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: IOHandler.patch
Type: application/octet-stream
Size: 493 bytes
Desc: IOHandler.patch
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20141125/334807bc/attachment.obj>


More information about the lldb-commits mailing list