From: asmwarrior <asmwarrior@gmail.com>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] avoid the crash of gdb+pretty printer on initialized local variables
Date: Sun, 04 Dec 2011 01:41:00 -0000 [thread overview]
Message-ID: <4EDAD0B3.80505@gmail.com> (raw)
In-Reply-To: <m3wrae9au9.fsf@fleche.redhat.com>
On 2011-12-3 0:50, Tom Tromey wrote:
>>>>>> ">" == ext asmwarrior <asmwarrior@gmail.com> writes:
>
>>> When debugger with python pretty printer, I sometimes get the gdb crash
>>> when I try to show the value of uninitialized local variables.
>
> gdb should not crash.
>
> Is this that mingw-builds-only problem that keeps popping up?
Thanks for the reply and comments.
Yes, I guess it is only the mingw gdb problem, I have no linux at the moment, but in the Codeblocks' forum, I hear no Linux users complained this kind of crash of gdb on linux.
> I forget, something to do with not using the right gcc flag?
My app was build with -O0 and -g, no extra flag is used.
>
>>> The patch is just a work-around/hack to handle this problem.
>>> I just first check if the symbol is a local variable, and then check the
>>> current line SAL is smaller than the variable's declaration line. If
>>> true, which means this local variable is OK to show, if not, than I just
>>> skip it.
>
> This is not ok. First, due to optimization, lines can be smeared
> around, leading to the wrong result here. Second, a variable can be
> trashed for many reasons, like other bugs in the code. In this second
> case it is still unacceptable for gdb to crash.
>
> In theory the existing code will detect memory access errors and cause
> printing to stop early. If you have a case where this doesn't work
> properly, make a reproducible test case.
Yes, agreed, as I said, it is only a work around. I create this patch to only avoid the crash of gdb under mingw.
The sample code below can easily cause the crash under mingw+gdb+python pretty printer.
>
>>> void fun()
>>> {
>>> wxString *psty = (wxString*) NULL;
>>> wxString wxStr(L"wxString");
>>> wxStr += L" Value";
>>> std::string stdStr("std::string");
>>> stdStr.append(" value");
>>> std::map<int, std::string> m;
>>> m[0] = "000";
>>> m[1] = "111"; //break point here, we stop here
>
It was not easy to catch such crash problem under windows.
By the way, I found a way to debug gdb under Codeblocks' IDE, see:
http://forums.codeblocks.org/index.php/topic,15618.msg105064.html#msg105064
It has some advantages than just debug gdb under command line. (mentioned in the above link post)
Hopefully it will help some Windows user to easily check the crash problem in the future.
asmwarrior
ollydbg from codeblocks' forum
next prev parent reply other threads:[~2011-12-04 1:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4ED379D8.4060808@gmail.com>
2011-12-02 4:32 ` asmwarrior
2011-12-02 16:51 ` Tom Tromey
2011-12-04 1:41 ` asmwarrior [this message]
[not found] ` <CAF4KFGqyz0WMWWJt9x1HZpO+urMo9jJLyudcRrHxUTqJf8mvqA@mail.gmail.com>
[not found] ` <CAF4KFGp2cDOzKdV62MfX0vpHUAxj1D2W0W3cBZnZpYHPYxZEuA@mail.gmail.com>
2011-12-05 10:13 ` Fwd: " Martin Runge
2011-12-05 12:48 ` André Pönitz
2011-12-20 14:38 ` Tom Tromey
2011-12-05 21:51 ` Tom Tromey
2011-12-06 10:34 ` asmwarrior
2011-12-06 15:41 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EDAD0B3.80505@gmail.com \
--to=asmwarrior@gmail.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox