From 534a2454530bc41cbc78bbe7975920300e9df6db Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 11 Jan 2016 22:37:35 +0100 Subject: [PATCH] Debug return value now found based on previous frame function name --- src/debug.cc | 13 ++++++++++--- src/debug.h | 5 ++++- src/source_clang.cc | 3 +-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/debug.cc b/src/debug.cc index 29703c0..25003ab 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -126,6 +126,13 @@ void Debug::start(const std::string &command, const boost::filesystem::path &pat break; } } + + last_function_name=current_function_name; + auto function_name_cstr=process->GetSelectedThread().GetSelectedFrame().GetFunctionName(); + if(function_name_cstr!=NULL) + current_function_name=function_name_cstr; + else + current_function_name.clear(); } //Update debug status @@ -375,7 +382,7 @@ std::string Debug::get_value(const std::string &variable, const boost::filesyste return variable_value; } -std::string Debug::get_return_value(const boost::filesystem::path &file_path, unsigned int line_nr, unsigned int line_index) { +std::string Debug::get_return_value(const std::string &function_name, const boost::filesystem::path &file_path) { std::string return_value; event_mutex.lock(); if(state==lldb::StateType::eStateStopped) { @@ -386,8 +393,8 @@ std::string Debug::get_return_value(const boost::filesystem::path &file_path, un if(line_entry.IsValid()) { lldb::SBStream stream; line_entry.GetFileSpec().GetDescription(stream); - if(boost::filesystem::path(stream.GetData())==file_path && line_entry.GetLine()==line_nr && - (line_entry.GetColumn()==0 || line_entry.GetColumn()==line_index)) { + auto pos=last_function_name.find('('); + if(pos!=std::string::npos && last_function_name.substr(0, pos)==function_name && boost::filesystem::path(stream.GetData())==file_path) { lldb::SBStream stream; thread_return_value.GetDescription(stream); return_value=stream.GetData(); diff --git a/src/debug.h b/src/debug.h index 6f4a2c2..9d4f1a9 100644 --- a/src/debug.h +++ b/src/debug.h @@ -46,7 +46,7 @@ public: void delete_debug(); //can't use delete as function name std::string get_value(const std::string &variable, const boost::filesystem::path &file_path, unsigned int line_nr); - std::string get_return_value(const boost::filesystem::path &file_path, unsigned int line_nr, unsigned int line_index); + std::string get_return_value(const std::string &function_name, const boost::filesystem::path &file_path); bool is_invalid(); bool is_stopped(); @@ -67,6 +67,9 @@ private: std::mutex event_mutex; size_t buffer_size; + + std::string last_function_name; + std::string current_function_name; }; #endif diff --git a/src/source_clang.cc b/src/source_clang.cc index a36a318..e8892b5 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -423,8 +423,7 @@ void Source::ClangViewParse::show_type_tooltips(const Gdk::Rectangle &rectangle) Glib::ustring debug_value=Debug::get().get_value(token.get_spelling(), location.get_path(), location.get_offset().line); if(debug_value.empty()) { value_type="Return value"; - auto location=token.get_cursor().get_source_location(); - debug_value=Debug::get().get_return_value(location.get_path(), location.get_offset().line, location.get_offset().index); + debug_value=Debug::get().get_return_value(token.get_spelling(), token.get_cursor().get_source_location().get_path()); } if(!debug_value.empty()) { size_t pos=debug_value.find(" = ");