Author Topic: break "filename:line" will not work in the futher gdb  (Read 28257 times)

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
break "filename:line" will not work in the futher gdb
« on: March 25, 2012, 04:25:25 am »
Hi, OBF, see this post:
http://sourceware.org/ml/gdb-patches/2012-03/msg00823.html

I have some discussion with gdb developers, and after the line specification rewrite, the command break "filename:line" will not work anymore, can we use this command with out "quotes" like:

Code
break "filename":line
or
break filename:line

I think it was easy to change in debugger plugin, right?
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #1 on: March 25, 2012, 05:00:53 am »
It this the only place I have to change? in file: gdb_commands.h
Code
class GdbCmd_AddBreakpoint : public DebuggerCmd
{
        DebuggerBreakpoint::Pointer m_BP;
    public:
        /** @param bp The breakpoint to set. */
        GdbCmd_AddBreakpoint(DebuggerDriver* driver, DebuggerBreakpoint::Pointer bp)
            : DebuggerCmd(driver),
            m_BP(bp)
        {
            // gdb doesn't allow setting the bp number.
            // instead, we must read it back in ParseOutput()...
            m_BP->index = -1;

            if (m_BP->enabled)
            {
                if (m_BP->type == DebuggerBreakpoint::bptCode)//m_BP->func.IsEmpty())
                {
                    wxString out = m_BP->filename;
                    // we add one to line,  because scintilla uses 0-based line numbers, while gdb uses 1-based
                    if (!m_BP->temporary)
                        m_Cmd << _T("break ");
                    else
                        m_Cmd << _T("tbreak ");
                    m_Cmd << _T('"') << out << _T(":") << wxString::Format(_T("%d"), m_BP->line) << _T('"');
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #2 on: March 25, 2012, 11:22:21 am »
Probably.
What version of gdb has this feature? 7.4?
« Last Edit: March 25, 2012, 11:24:26 am by oBFusCATed »
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #3 on: March 26, 2012, 02:33:12 am »
Probably.
I just remove the double-quote in the break command, and now setting bp works OK under c::b, but it looks like the removing bp works badly, maybe, the parsing output method should be changed also.
Quote
What version of gdb has this feature? 7.4?
This new feature is tested by one gdb developer(in his git gdb branch), I think it will be merged to the main trunk some days later. gdb 7.4 has already released(they won't add any new feature in the 7.4 branch), so I believe it will happen in gdb 7.5.

EDIT: As the change will break many IDE front end, I think there will be further discussions in gdb maillist.


« Last Edit: March 26, 2012, 03:33:31 am by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #4 on: March 26, 2012, 06:34:21 am »
If it is not an official release, you're on your own, sorry. No time to support random gdb-testing-versions.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #5 on: March 26, 2012, 07:58:26 am »
If it is not an official release, you're on your own, sorry. No time to support random gdb-testing-versions.
Ok, never mind.
I will follow the discussions in gdb maillist, and response if the break command has changed.
Thanks.

PS: I'm looking forward to test/try your gdb mi plugin when they are ready.  :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #6 on: March 26, 2012, 09:33:22 am »
You can get it for here: svn://cmpt.benbmp.org/cb_gdb_mi
It should be relatively usable.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline thomas

  • Administrator
  • Lives here!
  • *****
  • Posts: 3979
Re: break "filename:line" will not work in the futher gdb
« Reply #7 on: March 26, 2012, 12:06:23 pm »
Does "filename":line not make a lot more sense anyway, even now? That's assuming the current version supports that, of course.

If the present version supports this variant, I don't see why we should not use it. A line number should not contain anything that needs quoting, only a filename might. Insofar, only quoting the filename is a kind of sensible approach.
"We should forget about small efficiencies, say about 97% of the time: Premature quotation is the root of public humiliation."

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #8 on: March 26, 2012, 01:36:12 pm »
Does "filename":line not make a lot more sense anyway, even now? That's assuming the current version supports that, of course.

If the present version supports this variant, I don't see why we should not use it. A line number should not contain anything that needs quoting, only a filename might. Insofar, only quoting the filename is a kind of sensible approach.
The gdb developer Keith strongly suggest that the line number should not be quoted.
This feature "filename":line does not exist in the current gdb CVS or 7.4 branch, but I guess they still need some test. (Currently, the new line specification has already pass all the gdb build-in tests)

Change our debugger branch code is quite simple. For the
Code
break filename:line
Here is the patch:
Code
Index: E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h
===================================================================
--- E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h (revision 7909)
+++ E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h (working copy)
@@ -131,7 +131,7 @@
 // Breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reBreakpoint(_T("Breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
 // Breakpoint 1 ("/home/jens/codeblocks-build/codeblocks-1.0svn/src/plugins/debuggergdb/gdb_commands.h:125) pending.
-static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\(\\\"(.+):([0-9]+)\\)[ \t]pending\\."));
+static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\((.+):([0-9]+)\\)[ \t]pending\\."));
 // Hardware assisted breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reHWBreakpoint(_T("Hardware assisted breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
 // Hardware watchpoint 1: expr
@@ -448,7 +448,7 @@
                         m_Cmd << _T("break ");
                     else
                         m_Cmd << _T("tbreak ");
-                    m_Cmd << _T('"') << out << _T(":") << wxString::Format(_T("%d"), m_BP->line) << _T('"');
+                    m_Cmd << out << _T(":") << wxString::Format(_T("%d"), m_BP->line);
                 }
                 else if (m_BP->type == DebuggerBreakpoint::bptData)
                 {
This patch works under both the official gdb or the gdb-line-spec-branch.

For
Code
break "filename":line
It should also be quite easy to implement. :)

To my point: I think mostly quote is not needed. (I exclude the case that file name does not contain spaces  :), I'm not sure gdb support this)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #9 on: March 26, 2012, 01:40:16 pm »
The quote was added because some people have their projects inside paths containing "code::blocks" and this is regarded as method/function specification.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #10 on: March 26, 2012, 01:50:01 pm »
The quote was added because some people have their projects inside paths containing "code::blocks" and this is regarded as method/function specification.
Ok, thanks, here is the new test from command line(under c::b debugger plugin)

Code
[debug]> break "E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain1.cpp":29
[debug]No source file named E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain1.cpp.
[debug]Breakpoint 6 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain1.cpp":29) pending.
[debug]>>>>>>cb_gdb:

No source file named E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain1.cpp.
Breakpoint 6 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain1.cpp":29) pending.
> break "E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp":35

[debug]> break "E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp":35
[debug]Breakpoint 7 at 0x684c1814: file E:\code\cb\test_code\DebugDLLTest\TestDLL\dllmain.cpp, line 35.
[debug]>>>>>>cb_gdb:

Breakpoint 7 at 0x684c1814: file E:\code\cb\test_code\DebugDLLTest\TestDLL\dllmain.cpp, line 35.


So, I'm now trying to adjust the reg. :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #11 on: March 26, 2012, 02:08:00 pm »
So, I'm now trying to adjust the reg. :)
Good luck...
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #12 on: March 26, 2012, 03:18:02 pm »
So, I'm now trying to adjust the reg. :)
Good luck...
Thanks, Done. Here is the new regular expression and patch:
Code
Index: E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h
===================================================================
--- E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h (revision 7909)
+++ E:/code/cb/cb_debugger_branch/src/plugins/debuggergdb/gdb_commands.h (working copy)
@@ -131,7 +131,7 @@
 // Breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reBreakpoint(_T("Breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
 // Breakpoint 1 ("/home/jens/codeblocks-build/codeblocks-1.0svn/src/plugins/debuggergdb/gdb_commands.h:125) pending.
-static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\(\\\"(.+):([0-9]+)\\)[ \t]pending\\."));
+static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\(\\\"(.+)\\\":([0-9]+)\\)[ \t]pending\\."));
 // Hardware assisted breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reHWBreakpoint(_T("Hardware assisted breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
 // Hardware watchpoint 1: expr
@@ -448,7 +448,7 @@
                         m_Cmd << _T("break ");
                     else
                         m_Cmd << _T("tbreak ");
-                    m_Cmd << _T('"') << out << _T(":") << wxString::Format(_T("%d"), m_BP->line) << _T('"');
+                    m_Cmd << _T('"') << out << _T("\":") << wxString::Format(_T("%d"), m_BP->line);
                 }
                 else if (m_BP->type == DebuggerBreakpoint::bptData)
                 {
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #13 on: March 27, 2012, 04:03:15 am »
FYI:
The command:
Code
break "filename:line" 
is reserved for compatibility.

In the future, the gdb bp pending response will have quote balance.

See:Re: [RFA 1/2] Linespec rewrite (update 2)
« Last Edit: March 27, 2012, 04:52:58 am by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #14 on: April 06, 2012, 02:13:35 am »
Again. The new linespec feature is now in GDB CVS HEAD, which means it will be official in GDB 7.5 (It also support using filename with spaces). I think we need to adjust the regex a little to support the new pattern and also keep the old GDB compatible. This should be easy.  :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #15 on: April 06, 2012, 09:09:18 am »
This should be easy.  :)
Are you sure? I doubt pretty much.
But anyway patches welcome, but you have to test them a lot. Path with space, path with ::, linux, windows, etc...
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #16 on: April 07, 2012, 02:53:15 pm »
I have build gdb cvs 2012-04-07, I use PCX's gcc 4.6.3.
also I change the break command send from c::b to
Code
break "filename":line

I have a cbp project which I put in a folder name contains spaces, You can see the debug log:

Quote
Starting debugger: E:\code\gcc\myPCXMinGW463\bin\gdb.exe -nx -fullname  -quiet  -args E:/code/cb/TEST_C~1/SPACEF~1/hi/bin/Debug/hi.exe
done

[debug]> set prompt >>>>>>cb_gdb:
[debug]Skip initializing the scripting!

Setting breakpoints

[debug]Reading symbols from E:\code\cb\TEST_C~1\SPACEF~1\hi\bin\Debug\hi.exe...done.
[debug](gdb) >>>>>>cb_gdb:
[debug]> show version
[debug]GNU gdb (GDB) 7.4.50.20120407-cvs
[debug]Copyright (C) 2012 Free Software Foundation, Inc.
[debug]License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[debug]This is free software: you are free to change and redistribute it.
[debug]There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
[debug]and "show warranty" for details.
[debug]This GDB was configured as "mingw32".
[debug]For bug reporting instructions, please see:
[debug]<http://www.gnu.org/software/gdb/bugs/>.
[debug]>>>>>>cb_gdb:
[debug]> set confirm off

Debugger name and version: GNU gdb (GDB) 7.4.50.20120407-cvs

[debug]>>>>>>cb_gdb:
[debug]> set width 0
[debug]>>>>>>cb_gdb:
[debug]> set height 0
[debug]>>>>>>cb_gdb:
[debug]> set breakpoint pending on
[debug]>>>>>>cb_gdb:
[debug]> set print asm-demangle on
[debug]>>>>>>cb_gdb:
[debug]> set unwindonsignal on
[debug]>>>>>>cb_gdb:
[debug]> set print elements 0
[debug]>>>>>>cb_gdb:
[debug]> set debugevents on
[debug]>>>>>>cb_gdb:
[debug]> set new-console on
[debug]>>>>>>cb_gdb:
[debug]> set disassembly-flavor att
[debug]>>>>>>cb_gdb:
[debug]> catch throw
[debug]Catchpoint 1 (throw)
[debug]>>>>>>cb_gdb:
[debug]> source E:\code\gcc\myPCXMinGW463\bin\my.gdb

[debug]>>>>>>cb_gdb:>>>>>>cb_gdb:
[debug]> directory E:/code/cb/TEST_C~1/SPACEF~1/hi/
[debug]Source directories searched: E:/code/cb/TEST_C~1/SPACEF~1/hi;$cdir;$cwd
[debug]>>>>>>cb_gdb:
[debug]> break "E:/code/cb/test_code/space folder/hi/main.cpp":7
[debug]Breakpoint 2 at 0x4013de: file E:\code\cb\test_code\space folder\hi\main.cpp, line 7.
[debug]>>>>>>cb_gdb:
[debug]> run
[debug]Starting program: E:\code\cb\TEST_C~1\SPACEF~1\hi\bin\Debug\hi.exe
[debug]gdb: windows_init_thread_list

Child process PID: 3796

[debug][New Thread 3796.0x2e4]
[debug]Breakpoint 2, main () at E:\code\cb\test_code\space folder\hi\main.cpp:7
[debug]E:\code\cb\test_code\space folder\hi\main.cpp:7:62:beg:0x4013de
[debug]>>>>>>cb_gdb:

At E:\code\cb\test_code\space folder\hi\main.cpp:7

[debug]> set debugevents off
[debug]>>>>>>cb_gdb:
[debug]> next
[debug]E:\code\cb\test_code\space folder\hi\main.cpp:8:99:beg:0x401402
[debug]>>>>>>cb_gdb:


You can see, the breakpoint hit correctly, and next command also works OK.

PS: I have not quite familiar with Linux, so I can only test under Windows.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #17 on: April 07, 2012, 03:21:18 pm »
What about gdb7.4 (non-cvs) and gdb7.3/2/1 or 6.8 (don't care too much btw)?
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #18 on: April 08, 2012, 09:28:54 am »
First Patch:
https://developer.berlios.de/patch/?func=detailpatch&patch_id=3274&group_id=5358

This will let C::B support gdb(cvs, 7.5), and preserve the old gdb ( gdb7.4-gdb6.8 )  compatibility.

See my explanation in gdb maillist:
http://sourceware.org/ml/gdb-patches/2012-03/msg00899.html
« Last Edit: April 08, 2012, 10:57:06 am by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #19 on: April 08, 2012, 10:02:31 am »
Please add a line which demonstrates what kind of lines matches the new regex, because I'm not really sure.

Also your patch doesn't change the setting of breakpoints, why?

p.s. I guess you wanted to use preserve instead of deserve?
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #20 on: April 08, 2012, 10:54:51 am »
Please add a line which demonstrates what kind of lines matches the new regex, because I'm not really sure.
Here is what gdb7.4-gdb6.8 returned:
Code
[debug]> break "E:/code/cb/cb_trunk/src/plugins/codecompletion/parser/token.cpp:64"
[debug]No source file named E:/code/cb/cb_trunk/src/plugins/codecompletion/parser/token.cpp.
[debug]Breakpoint 2 ("E:/code/cb/cb_trunk/src/plugins/codecompletion/parser/token.cpp:64) pending.

Here is gdb cvs(7.5) returned:
Code
[debug]> break "E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp:29"
[debug]No source file named E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp.
[debug]Breakpoint 4 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp:29") pending.

You see, the gdb cvs has a quote before right-parenthesis, but gdb7.4-gdb6.8 does not.

Quote
Also your patch doesn't change the setting of breakpoints, why?
I don't think the old gdb( 7.4-6.8 ) will works under command like
Code
break "filename":line
So, I don't change the bp command send from c::b.

Quote
p.s. I guess you wanted to use preserve instead of deserve?
Thanks, It should be "preserve". (My English is not quite good :))
« Last Edit: April 08, 2012, 11:00:01 am by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #21 on: April 08, 2012, 11:06:29 am »
Code
[debug]Breakpoint 4 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp:29") pending.
Put this line in the patch as a comment and commit it.

Also this line: "Breakpoint ([0-9]+)[ \\t]\\(\\\"(.+):([0-9]+)(\"?)\\)[ \\t]pending\\." looks a bit better to me.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #22 on: April 08, 2012, 11:09:22 am »
Code
[debug]Breakpoint 4 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp:29") pending.
Put this line in the patch as a comment and commit it.

Also this line:
Code
"Breakpoint ([0-9]+)[ \\t]\\(\\\"(.+):([0-9]+)(\"?)\\)[ \\t]pending\\." 
looks a bit better to me.

OK, I will refine my patch and commit it, thanks fore the review.

If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #23 on: April 08, 2012, 11:19:32 am »
@OBF:
Do you think that all

Code
\\\"
should be turned to
Code
\"

You can see there is one instance before the position I changed.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #24 on: April 08, 2012, 11:22:35 am »
I'm not really sure about the number of \ in this. This is a copy paste from the second line in the regex testbed plugin.
The thing I want in there is (\"?), so it is clear that the " is optional.
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #25 on: April 08, 2012, 01:46:56 pm »
I'm not really sure about the number of \ in this. This is a copy paste from the second line in the regex testbed plugin.
The thing I want in there is (\"?), so it is clear that the " is optional.

I did further test, and I can confirm that
Code
\\\"
can be replaced by
Code
\"
, everything works OK.
This is because
Code
"
is not a special character in regular expression.

I will commit the patch below if there is no objections in a few days.
Code
Index: E:/code/cb/cb_trunk/src/plugins/debuggergdb/gdb_commands.h
===================================================================
--- E:/code/cb/cb_trunk/src/plugins/debuggergdb/gdb_commands.h (revision 7925)
+++ E:/code/cb/cb_trunk/src/plugins/debuggergdb/gdb_commands.h (working copy)
@@ -130,8 +130,11 @@
 static wxRegEx reBT4(_T("#([0-9]+)[ \\t]+(.+)[ \\t]in[ \\t](.+)")); // case #11
 // Breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reBreakpoint(_T("Breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
+// GDB7.4 and before will return:
 // Breakpoint 1 ("/home/jens/codeblocks-build/codeblocks-1.0svn/src/plugins/debuggergdb/gdb_commands.h:125) pending.
-static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\(\\\"(.+):([0-9]+)\\)[ \t]pending\\."));
+// GDB7.5 and later will return:
+// Breakpoint 4 ("E:/code/cb/test_code/DebugDLLTest/TestDLL/dllmain.cpp:29") pending.
+static wxRegEx rePendingBreakpoint(_T("Breakpoint ([0-9]+)[ \t]\\(\"(.+):([0-9]+)(\"?)\\)[ \t]pending\\."));
 // Hardware assisted breakpoint 1 at 0x4013d6: file main.cpp, line 8.
 static wxRegEx reHWBreakpoint(_T("Hardware assisted breakpoint ([0-9]+) at (0x[0-9A-Fa-f]+)"));
 // Hardware watchpoint 1: expr
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: break "filename:line" will not work in the futher gdb
« Reply #26 on: April 08, 2012, 02:14:55 pm »
Go on...
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5916
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: break "filename:line" will not work in the futher gdb
« Reply #27 on: April 09, 2012, 03:32:10 am »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.