mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 06:57:35 +00:00
HackStudio: Implement "Step Over" debugging action
The "Step Over" action continues execution without stepping into instructions in subsequent function calls.
This commit is contained in:
parent
99788e6b32
commit
5c494eefd6
7 changed files with 75 additions and 13 deletions
|
@ -138,7 +138,7 @@ Optional<DebugInfo::SourcePosition> DebugInfo::get_source_position(u32 target_ad
|
|||
// TODO: We can do a binray search here
|
||||
for (size_t i = 0; i < m_sorted_lines.size() - 1; ++i) {
|
||||
if (m_sorted_lines[i + 1].address > target_address) {
|
||||
return Optional<SourcePosition>({ m_sorted_lines[i].file, m_sorted_lines[i].line, m_sorted_lines[i].address });
|
||||
return SourcePosition::from_line_info(m_sorted_lines[i]);
|
||||
}
|
||||
}
|
||||
return {};
|
||||
|
@ -300,11 +300,38 @@ OwnPtr<DebugInfo::VariableInfo> DebugInfo::create_variable_info(const Dwarf::DIE
|
|||
}
|
||||
|
||||
String DebugInfo::name_of_containing_function(u32 address) const
|
||||
{
|
||||
auto function = get_containing_function(address);
|
||||
if (!function.has_value())
|
||||
return {};
|
||||
return function.value().name;
|
||||
}
|
||||
|
||||
Optional<DebugInfo::VariablesScope> DebugInfo::get_containing_function(u32 address) const
|
||||
{
|
||||
for (const auto& scope : m_scopes) {
|
||||
if (!scope.is_function || address < scope.address_low || address >= scope.address_high)
|
||||
continue;
|
||||
return scope.name;
|
||||
return scope;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
Vector<DebugInfo::SourcePosition> DebugInfo::source_lines_in_scope(const VariablesScope& scope) const
|
||||
{
|
||||
Vector<DebugInfo::SourcePosition> source_lines;
|
||||
for (const auto& line : m_sorted_lines) {
|
||||
if (line.address < scope.address_low)
|
||||
continue;
|
||||
|
||||
if (line.address >= scope.address_high)
|
||||
break;
|
||||
source_lines.append(SourcePosition::from_line_info(line));
|
||||
}
|
||||
return source_lines;
|
||||
}
|
||||
|
||||
DebugInfo::SourcePosition DebugInfo::SourcePosition::from_line_info(const LineProgram::LineInfo& line)
|
||||
{
|
||||
return { line.file, line.line, line.address };
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue