mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 18:37:58 +03:00
HackStudio: Gracefully handle unfound source files
This commit is contained in:
parent
5fd64045b1
commit
b931771d24
Notes:
sideshowbarker
2024-07-19 06:53:50 +09:00
Author: https://github.com/itamar8910 Commit: https://github.com/SerenityOS/serenity/commit/b931771d244 Pull-request: https://github.com/SerenityOS/serenity/pull/2118 Reviewed-by: https://github.com/awesomekling
@ -35,7 +35,7 @@ Debugger& Debugger::the()
|
||||
}
|
||||
|
||||
void Debugger::initialize(
|
||||
Function<void(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<HasControlPassedToUser(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<void()> on_continue_callback,
|
||||
Function<void()> on_exit_callback)
|
||||
{
|
||||
@ -48,7 +48,7 @@ bool Debugger::is_initialized()
|
||||
}
|
||||
|
||||
Debugger::Debugger(
|
||||
Function<void(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<HasControlPassedToUser(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<void()> on_continue_callback,
|
||||
Function<void()> on_exit_callback)
|
||||
: m_on_stopped_callback(move(on_stop_callback))
|
||||
@ -138,13 +138,17 @@ int Debugger::debugger_loop()
|
||||
in_single_step_mode = false;
|
||||
}
|
||||
|
||||
m_on_stopped_callback(regs);
|
||||
auto control_passed_to_user = m_on_stopped_callback(regs);
|
||||
|
||||
pthread_mutex_lock(&m_continue_mutex);
|
||||
pthread_cond_wait(&m_continue_cond, &m_continue_mutex);
|
||||
pthread_mutex_unlock(&m_continue_mutex);
|
||||
if (control_passed_to_user == HasControlPassedToUser::Yes) {
|
||||
pthread_mutex_lock(&m_continue_mutex);
|
||||
pthread_cond_wait(&m_continue_cond, &m_continue_mutex);
|
||||
pthread_mutex_unlock(&m_continue_mutex);
|
||||
|
||||
m_on_continue_callback();
|
||||
m_on_continue_callback();
|
||||
} else {
|
||||
m_continue_type = ContinueType::Continue;
|
||||
}
|
||||
|
||||
if (m_continue_type == ContinueType::Continue) {
|
||||
return DebugSession::DebugDecision::Continue;
|
||||
|
@ -37,8 +37,14 @@
|
||||
class Debugger {
|
||||
public:
|
||||
static Debugger& the();
|
||||
|
||||
enum class HasControlPassedToUser {
|
||||
No,
|
||||
Yes,
|
||||
};
|
||||
|
||||
static void initialize(
|
||||
Function<void(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<HasControlPassedToUser(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<void()> on_continue_callback,
|
||||
Function<void()> on_exit_callback);
|
||||
|
||||
@ -66,7 +72,7 @@ public:
|
||||
|
||||
private:
|
||||
explicit Debugger(
|
||||
Function<void(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<HasControlPassedToUser(const PtraceRegisters&)> on_stop_callback,
|
||||
Function<void()> on_continue_callback,
|
||||
Function<void()> on_exit_callback);
|
||||
|
||||
@ -83,7 +89,7 @@ private:
|
||||
Vector<DebugInfo::SourcePosition> m_breakpoints;
|
||||
String m_executable_path;
|
||||
|
||||
Function<void(const PtraceRegisters&)> m_on_stopped_callback;
|
||||
Function<HasControlPassedToUser(const PtraceRegisters&)> m_on_stopped_callback;
|
||||
Function<void()> m_on_continue_callback;
|
||||
Function<void()> m_on_exit_callback;
|
||||
|
||||
|
@ -609,13 +609,17 @@ int main(int argc, char** argv)
|
||||
dbg() << "Program stopped";
|
||||
|
||||
auto source_position = Debugger::the().session()->debug_info().get_source_position(regs.eip);
|
||||
ASSERT(source_position.has_value());
|
||||
if (!source_position.has_value()) {
|
||||
dbg() << "Could not find source position for address: " << (void*)regs.eip;
|
||||
return Debugger::HasControlPassedToUser::No;
|
||||
}
|
||||
current_editor_in_execution = get_editor_of_file(source_position.value().file_path);
|
||||
current_editor_in_execution->editor().set_execution_position(source_position.value().line_number - 1);
|
||||
debug_info_widget.update_variables(regs);
|
||||
continue_action->set_enabled(true);
|
||||
single_step_action->set_enabled(true);
|
||||
reveal_action_tab(debug_info_widget);
|
||||
return Debugger::HasControlPassedToUser::Yes;
|
||||
},
|
||||
[&]() {
|
||||
dbg() << "Program continued";
|
||||
|
Loading…
Reference in New Issue
Block a user