@@ -753,67 +753,47 @@ std::optional<ModuleNameAndOffset> DebuggerBreakpoints::FindBreakpointKey(const
753753}
754754
755755
756- std::optional<ModuleNameAndOffset> DebuggerBreakpoints::FindConditionKey (const ModuleNameAndOffset& address)
756+ std::string DebuggerBreakpoints::GetConditionAbsolute (const uint64_t address)
757757{
758- if (m_conditions.contains (address))
759- return address;
760-
761- // absolute address comparison (handles module name differences)
762- // assumes conditions are stored with valid, resolvable module names
763- const uint64_t targetAbsolute = m_state->GetModules ()->RelativeAddressToAbsolute (address);
764- for (const auto & [key, _] : m_conditions)
765- {
766- if (const uint64_t conditionAbsolute = m_state->GetModules ()->RelativeAddressToAbsolute (key);
767- conditionAbsolute == targetAbsolute)
768- return key;
769- }
770-
771- // if the address has empty module name, it might be a file virtual address?
772- // try converting to an offset by subtracting the original file base.
773- if (address.module .empty ())
758+ for (const auto & [key, condition] : m_conditions)
774759 {
775- if (const uint64_t originalBase = m_state->GetController ()->GetOriginalFileBase ();
776- address.offset >= originalBase)
777- {
778- const uint64_t fileOffset = address.offset - originalBase;
779- const std::string& mainFile = m_state->GetController ()->GetData ()->GetFile ()->GetOriginalFilename ();
780- for (const auto & [key, _] : m_conditions)
781- {
782- if (key.offset == fileOffset && DebugModule::IsSameBaseModule (mainFile, key.module ))
783- return key;
784- }
785- }
760+ if (m_state->GetModules ()->RelativeAddressToAbsolute (key) == address)
761+ return condition;
786762 }
787-
788- return std::nullopt ;
789- }
790-
791-
792- std::string DebuggerBreakpoints::GetConditionAbsolute (const uint64_t address)
793- {
794- const ModuleNameAndOffset info = m_state->GetModules ()->AbsoluteAddressToRelative (address);
795- return GetConditionOffset (info);
763+ return " " ;
796764}
797765
798766
799767std::string DebuggerBreakpoints::GetConditionOffset (const ModuleNameAndOffset& address)
800768{
801- if (const auto key = FindConditionKey (address))
802- return m_conditions[*key];
769+ auto actualKey = FindBreakpointKey (address);
770+ if (!actualKey)
771+ return " " ;
772+
773+ if (const auto it = m_conditions.find (*actualKey); it != m_conditions.end ())
774+ return it->second ;
803775 return " " ;
804776}
805777
806778
807779bool DebuggerBreakpoints::HasConditionAbsolute (const uint64_t address)
808780{
809- const ModuleNameAndOffset info = m_state->GetModules ()->AbsoluteAddressToRelative (address);
810- return HasConditionOffset (info);
781+ for (const auto & [key, _] : m_conditions)
782+ {
783+ if (m_state->GetModules ()->RelativeAddressToAbsolute (key) == address)
784+ return true ;
785+ }
786+ return false ;
811787}
812788
813789
814790bool DebuggerBreakpoints::HasConditionOffset (const ModuleNameAndOffset& address)
815791{
816- return FindConditionKey (address).has_value ();
792+ auto actualKey = FindBreakpointKey (address);
793+ if (!actualKey)
794+ return false ;
795+
796+ return m_conditions.contains (*actualKey);
817797}
818798
819799
0 commit comments