mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-04 03:35:19 +02:00
ImDebugger: fix stale symbol list after a game is reloaded
The disasm window cached the flattened symbol list and only rebuilt it when one of three menu items said so. Nothing marked it dirty when a game booted or exited, and a new SymbolMap is allocated per boot, so the list kept showing the previous game's functions. Give SymbolMap a version counter that every mutator bumps, and let the window compare against it instead. The counter is process-wide rather than per-map, so a fresh map can't hand out a version a cached copy already holds. Also re-find the selected symbol by address after a rebuild (the index means something else afterwards), and drop the unused symbol cache members in ImMemWindow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SfY7iFJEjmRXf1XGrTs4MF
This commit is contained in:
co-authored by
Claude Opus 5
parent
adccd302e5
commit
daa18fc25a
@@ -2626,12 +2626,11 @@ void ImDebugger::Frame(MIPSDebugInterface *mipsDebug, GPUCommon *gpuDebug, Draw:
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::MenuItem("Load .ppmap...")) {
|
||||
System_BrowseForFile(reqToken_, "Load PPSSPP symbol map", BrowseFileType::SYMBOL_MAP, [this](std::string_view responseString, int) {
|
||||
System_BrowseForFile(reqToken_, "Load PPSSPP symbol map", BrowseFileType::SYMBOL_MAP, [](std::string_view responseString, int) {
|
||||
Path path(responseString);
|
||||
if (!g_symbolMap->LoadSymbolMap(path)) {
|
||||
ERROR_LOG(Log::Common, "Failed to load symbol map");
|
||||
}
|
||||
disasm_.DirtySymbolMap();
|
||||
});
|
||||
}
|
||||
if (ImGui::MenuItem("Save .ppmap...")) {
|
||||
@@ -2643,12 +2642,11 @@ void ImDebugger::Frame(MIPSDebugInterface *mipsDebug, GPUCommon *gpuDebug, Draw:
|
||||
});
|
||||
}
|
||||
if (ImGui::MenuItem("Load No$ .sym...")) {
|
||||
System_BrowseForFile(reqToken_, "Load No$ symbol map", BrowseFileType::SYMBOL_MAP, [this](std::string_view responseString, int) {
|
||||
System_BrowseForFile(reqToken_, "Load No$ symbol map", BrowseFileType::SYMBOL_MAP, [](std::string_view responseString, int) {
|
||||
Path path(responseString);
|
||||
if (!g_symbolMap->LoadNocashSym(path)) {
|
||||
ERROR_LOG(Log::Common, "Failed to load No$ symbol map");
|
||||
}
|
||||
disasm_.DirtySymbolMap();
|
||||
});
|
||||
}
|
||||
if (ImGui::MenuItem("Save No$ .sym...")) {
|
||||
@@ -2663,7 +2661,6 @@ void ImDebugger::Frame(MIPSDebugInterface *mipsDebug, GPUCommon *gpuDebug, Draw:
|
||||
ImGui::MenuItem("Compress .ppmap files", nullptr, &g_Config.bCompressSymbols);
|
||||
if (ImGui::MenuItem("Reset symbol map")) {
|
||||
g_symbolMap->Clear();
|
||||
disasm_.DirtySymbolMap();
|
||||
// NotifyDebuggerMapLoaded();
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
|
||||
Reference in New Issue
Block a user