[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