Re: conditional breakpoints in gdb (c++)
On 2007-03-24 15:47, digz wrote:
Hi,
I am having a lot of trouble setting conditional breakpoints in gdb,
here is a simple example...
#include<string>
#include<iostream>
using namespace std;
void func(string& s){
cout << s << endl;
}
int main()
{
string a[] ={ "A", "B", "C" };
for (int i=0; i < 3 ; i++)
func(a[i]);
}
~
I am trying to break at the cout (line # 6)
in func(string&) only if s == "C", but gdb disregards it no matter
what i try to do, here it goes
(gdb) b 6 if s == "C" //does not work breaks for "A", "B", "C"
(gdb) b 6 if ( (s== "C") > 0) //breaks for all "A", "B", "C"
(gdb) b 6 if s.operator==("C") > 0
(gdb) b 6 if s.operator==(s,"C") > 0
Error in testing breakpoint condition:
There is no member or method named operator.
(gdb) b 6 if (strcmp(s.c_str() , "C") == 0 )
No symbol "strcmp" in current context.
The only way i can possibly think of is to add source lines and clean
them up later like
if ( s == "C" ) break;
and set a breakpoint at that line!!!
There has to be a better way to do this...what am i missing here..
This is off-topic here since it concerns 1) debugging, which is not
defined in the C++ standard and 2) a specific implementation, next time
try a group for your debugger, gnu.gdb comes to mind.
I've no personal experience with this kind of stuff under gdb, but in
VS2005 I notices a severe performance degradation when trying to set a
condition on a breakpoint, my guess is that the debugger braked on the
specific line each time it was executed, performed the check and if it
was false resumed execution. So I would insert a bit of code that
performed the check if I were you.
--
Erik Wikstr?m