diff --git a/src/BreakpointViewer.cpp b/src/BreakpointViewer.cpp index 648be812..dfa1e97a 100644 --- a/src/BreakpointViewer.cpp +++ b/src/BreakpointViewer.cpp @@ -856,6 +856,27 @@ std::optional BreakpointViewer::parseTableRow(BreakpointRef::Type ty return bp; } + +void BreakpointViewer::onSymbolTableChanged() +{ + for (int row = 0; row < bpTableWidget->rowCount(); ++row) { + auto* item = bpTableWidget->item(row, BP_ADDRESS); + + // scan tooltip validity + if (!item->text().isEmpty()) { + Symbol* s = debugSession.symbolTable().getAddressSymbol(item->text()); + auto address = stringToValue(item->text()); + assert(address); + + if (!s || *address != s->value()) { + setTextField(BreakpointRef::BREAKPOINT, row, LOCATION, item->text()); + setTextField(BreakpointRef::BREAKPOINT, row, BP_ADDRESS, ""); + } + } + } +} + + void BreakpointViewer::onAddBtnClicked(BreakpointRef::Type type) { auto sa = ScopedAssign(userMode, false); diff --git a/src/BreakpointViewer.h b/src/BreakpointViewer.h index 29581d00..96756b1e 100644 --- a/src/BreakpointViewer.h +++ b/src/BreakpointViewer.h @@ -28,6 +28,7 @@ class BreakpointViewer : public QTabWidget, private Ui::BreakpointViewer BreakpointViewer(DebugSession& session, QWidget* parent = nullptr); void setBreakpoints(Breakpoints* bps); + void onSymbolTableChanged(); void on_btnAddBp_clicked(); void on_btnRemoveBp_clicked(); void on_btnAddWp_clicked(); diff --git a/src/DebuggerForm.cpp b/src/DebuggerForm.cpp index 9e4406f4..eda0b077 100644 --- a/src/DebuggerForm.cpp +++ b/src/DebuggerForm.cpp @@ -1056,6 +1056,8 @@ void DebuggerForm::systemSymbolManager() SymbolManager symManager(session.symbolTable(), this); connect(&symManager, &SymbolManager::symbolTableChanged, &session, &DebugSession::sessionModified); + connect(&symManager, &SymbolManager::symbolTableChanged, + bpView, &BreakpointViewer::onSymbolTableChanged); symManager.exec(); emit symbolsChanged(); updateWindowTitle();