Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
3795539e
Commit
3795539e
authored
May 10, 2010
by
hjk
Browse files
debugger: fix scheduling of deletion of data watch points
parent
01aabbda
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/plugins/debugger/breakhandler.cpp
View file @
3795539e
...
...
@@ -219,6 +219,12 @@ QString BreakpointData::toToolTip() const
<<
"</td><td>"
<<
m_markerLineNumber
<<
"</td></tr>"
<<
"<tr><td>"
<<
BreakHandler
::
tr
(
"Breakpoint Number:"
)
<<
"</td><td>"
<<
bpNumber
<<
"</td></tr>"
<<
"<tr><td>"
<<
BreakHandler
::
tr
(
"Breakpoint Type:"
)
<<
"</td><td>"
<<
(
type
==
BreakpointType
?
BreakHandler
::
tr
(
"Breakpoint"
)
:
type
==
WatchpointType
?
BreakHandler
::
tr
(
"Watchpoint"
)
:
BreakHandler
::
tr
(
"Unknown breakpoint type"
))
<<
"</td></tr>"
<<
"</table><br><hr><table>"
<<
"<tr><th>"
<<
BreakHandler
::
tr
(
"Property"
)
<<
"</th><th>"
<<
BreakHandler
::
tr
(
"Requested"
)
...
...
@@ -249,22 +255,26 @@ QString BreakpointData::toString() const
{
QString
rc
;
QTextStream
str
(
&
rc
);
str
<<
BreakHandler
::
tr
(
"Marker File:"
)
<<
m_markerFileName
<<
' '
<<
BreakHandler
::
tr
(
"Marker Line:"
)
<<
m_markerLineNumber
<<
' '
<<
BreakHandler
::
tr
(
"Breakpoint Number:"
)
<<
bpNumber
<<
' '
<<
BreakHandler
::
tr
(
"File Name:"
)
str
<<
BreakHandler
::
tr
(
"Marker File:"
)
<<
' '
<<
m_markerFileName
<<
'\n'
<<
BreakHandler
::
tr
(
"Marker Line:"
)
<<
' '
<<
m_markerLineNumber
<<
'\n'
<<
BreakHandler
::
tr
(
"Breakpoint Number:"
)
<<
' '
<<
bpNumber
<<
'\n'
<<
BreakHandler
::
tr
(
"Breakpoint Type:"
)
<<
' '
<<
(
type
==
BreakpointType
?
BreakHandler
::
tr
(
"Breakpoint"
)
:
type
==
WatchpointType
?
BreakHandler
::
tr
(
"Watchpoint"
)
:
BreakHandler
::
tr
(
"Unknown breakpoint type"
))
<<
'\n'
<<
BreakHandler
::
tr
(
"File Name:"
)
<<
' '
<<
fileName
<<
" -- "
<<
bpFileName
<<
'\n'
<<
BreakHandler
::
tr
(
"Function Name:"
)
<<
BreakHandler
::
tr
(
"Function Name:"
)
<<
' '
<<
funcName
<<
" -- "
<<
bpFuncName
<<
'\n'
<<
BreakHandler
::
tr
(
"Line Number:"
)
<<
BreakHandler
::
tr
(
"Line Number:"
)
<<
' '
<<
lineNumber
<<
" -- "
<<
bpLineNumber
<<
'\n'
<<
BreakHandler
::
tr
(
"Breakpoint Address:"
)
<<
BreakHandler
::
tr
(
"Breakpoint Address:"
)
<<
' '
<<
address
<<
" -- "
<<
bpAddress
<<
'\n'
<<
BreakHandler
::
tr
(
"Condition:"
)
<<
BreakHandler
::
tr
(
"Condition:"
)
<<
' '
<<
condition
<<
" -- "
<<
bpCondition
<<
'\n'
<<
BreakHandler
::
tr
(
"Ignore Count:"
)
<<
BreakHandler
::
tr
(
"Ignore Count:"
)
<<
' '
<<
ignoreCount
<<
" -- "
<<
bpIgnoreCount
<<
'\n'
<<
BreakHandler
::
tr
(
"Thread Specification:"
)
<<
BreakHandler
::
tr
(
"Thread Specification:"
)
<<
' '
<<
threadSpec
<<
" -- "
<<
bpThreadSpec
<<
'\n'
;
return
rc
;
}
...
...
@@ -357,21 +367,30 @@ void BreakHandler::clear()
m_inserted
.
clear
();
}
int
BreakHandler
::
findSimilarBreakpoint
(
const
BreakpointData
&
needle
)
const
BreakpointData
*
BreakHandler
::
findSimilarBreakpoint
(
const
BreakpointData
&
needle
)
const
{
// Search a breakpoint we might refer to.
for
(
int
index
=
0
;
index
!=
size
();
++
index
)
{
const
BreakpointData
*
data
=
at
(
index
)
;
BreakpointData
*
data
=
m_bp
[
index
]
;
// Clear hit.
if
(
data
->
bpNumber
==
needle
.
bpNumber
)
return
index
;
return
data
;
// Clear miss.
if
(
data
->
type
!=
needle
.
type
)
continue
;
// We have numbers, but they are different.
if
(
!
data
->
bpNumber
.
isEmpty
()
&&
!
needle
.
bpNumber
.
isEmpty
()
&&
!
data
->
bpNumber
.
startsWith
(
needle
.
bpNumber
)
&&
!
needle
.
bpNumber
.
startsWith
(
data
->
bpNumber
))
continue
;
// At least at a position we were looking for.
// FIXME: breaks multiple breakpoints at the same location
if
(
fileNameMatch
(
data
->
fileName
,
needle
.
bpFileName
)
if
(
!
data
->
fileName
.
isEmpty
()
&&
fileNameMatch
(
data
->
fileName
,
needle
.
bpFileName
)
&&
data
->
lineNumber
==
needle
.
bpLineNumber
)
return
index
;
return
data
;
}
return
-
1
;
return
0
;
}
int
BreakHandler
::
findBreakpoint
(
const
QString
&
fileName
,
int
lineNumber
)
const
...
...
src/plugins/debugger/breakhandler.h
View file @
3795539e
...
...
@@ -69,7 +69,7 @@ public:
int
indexOf
(
BreakpointData
*
data
)
{
return
m_bp
.
indexOf
(
data
);
}
// If lineNumber < 0, interpret fileName as address.
int
findBreakpoint
(
const
QString
&
fileName
,
int
lineNumber
)
const
;
int
findSimilarBreakpoint
(
const
BreakpointData
&
data
)
const
;
// Returns index.
BreakpointData
*
findSimilarBreakpoint
(
const
BreakpointData
&
data
)
const
;
BreakpointData
*
findBreakpointByNumber
(
int
bpNumber
)
const
;
void
updateMarkers
();
...
...
src/plugins/debugger/breakwindow.cpp
View file @
3795539e
...
...
@@ -337,6 +337,7 @@ void BreakWindow::deleteBreakpoints(QList<int> list)
const
int
row
=
qMin
(
firstRow
,
model
()
->
rowCount
()
-
1
);
if
(
row
>=
0
)
setCurrentIndex
(
model
()
->
index
(
row
,
0
));
emit
breakpointSynchronizationRequested
();
}
void
BreakWindow
::
editBreakpoint
(
const
QModelIndexList
&
list
)
...
...
src/plugins/debugger/gdb/gdbengine.cpp
View file @
3795539e
...
...
@@ -2138,12 +2138,17 @@ void GdbEngine::setBreakpointDataFromOutput(BreakpointData *data, const GdbMi &b
data
->
bpFuncName
=
_
(
ba
);
}
else
if
(
child
.
hasName
(
"thread"
))
{
data
->
bpThreadSpec
=
child
.
data
();
}
else
if
(
child
.
hasName
(
"type"
))
{
if
(
child
.
data
()
==
"breakpoint"
)
data
->
type
=
BreakpointData
::
BreakpointType
;
else
// FIXME: Incomplete list of cases.
data
->
type
=
BreakpointData
::
WatchpointType
;
}
// This field is not present. Contents needs to be parsed from
// the plain "ignore" response.
//else if (child.hasName("ignore"))
// data->bpIgnoreCount = child.data();
}
// This field is not present. Contents needs to be parsed from
// the plain "ignore" response.
//else if (child.hasName("ignore"))
// data->bpIgnoreCount = child.data();
QString
name
;
if
(
!
fullName
.
isEmpty
())
{
...
...
@@ -2293,7 +2298,7 @@ void GdbEngine::handleBreakList(const GdbResponse &response)
void
GdbEngine
::
handleBreakList
(
const
GdbMi
&
table
)
{
GdbMi
body
=
table
.
findChild
(
"body"
);
const
GdbMi
body
=
table
.
findChild
(
"body"
);
QList
<
GdbMi
>
bkpts
;
if
(
body
.
isValid
())
{
// Non-Mac
...
...
@@ -2311,14 +2316,19 @@ void GdbEngine::handleBreakList(const GdbMi &table)
}
BreakHandler
*
handler
=
manager
()
->
breakHandler
();
for
(
int
index
=
0
;
index
!=
bkpts
.
size
();
++
index
)
{
for
each
(
const
GdbMi
&
bkpt
,
bkpts
)
{
BreakpointData
temp
;
setBreakpointDataFromOutput
(
&
temp
,
bkpts
.
at
(
index
));
int
found
=
handler
->
findSimilarBreakpoint
(
temp
);
if
(
found
!=
-
1
)
setBreakpointDataFromOutput
(
handler
->
at
(
found
),
bkpts
.
at
(
index
));
//else
//qDebug() << "CANNOT HANDLE RESPONSE" << bkpts.at(index).toString();
setBreakpointDataFromOutput
(
&
temp
,
bkpt
);
BreakpointData
*
data
=
handler
->
findSimilarBreakpoint
(
temp
);
//qDebug() << "\n\nGOT: " << bkpt.toString() << '\n' << temp.toString();
if
(
data
)
{
//qDebug() << " FROM: " << data->toString();
setBreakpointDataFromOutput
(
data
,
bkpt
);
//qDebug() << " TO: " << data->toString();
}
else
{
//qDebug() << " NOTHING SUITABLE FOUND";
debugMessage
(
_
(
"CANNOT FIND BP: "
+
bkpt
.
toString
()));
}
}
m_breakListOutdated
=
false
;
...
...
@@ -2548,11 +2558,14 @@ void GdbEngine::attemptBreakpointSynchronization()
foreach
(
BreakpointData
*
data
,
handler
->
takeRemovedBreakpoints
())
{
QByteArray
bpNumber
=
data
->
bpNumber
;
debugMessage
(
_
(
"DELETING BP "
+
bpNumber
+
" IN "
+
data
->
markerFileName
().
toLocal8Bit
()));
if
(
!
bpNumber
.
trim
me
d
().
isEmpty
())
if
(
!
bpNumber
.
trimmed
().
isEmpty
())
{
debugMessage
(
_
(
"DELETING BP "
+
bpNumber
+
" IN "
+
data
->
markerFileNa
me
().
toLocal8Bit
())
);
postCommand
(
"-break-delete "
+
bpNumber
,
NeedsStop
|
RebuildBreakpointModel
);
}
else
{
debugMessage
(
_
(
"QUIETLY REMOVING UNNUMBERED BREAKPOINT"
));
}
delete
data
;
}
...
...
@@ -2586,7 +2599,7 @@ void GdbEngine::attemptBreakpointSynchronization()
if
(
!
data
->
enabled
&&
data
->
bpEnabled
)
{
postCommand
(
"-break-disable "
+
data
->
bpNumber
,
NeedsStop
|
RebuildBreakpointModel
,
CB
(
handleBreak
Info
));
CB
(
handleBreak
Disable
),
data
->
bpNumber
.
toInt
(
));
data
->
bpEnabled
=
false
;
continue
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment