diff options
author | Greg Clayton <gclayton@apple.com> | 2011-10-14 07:41:33 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-10-14 07:41:33 +0000 |
commit | 5a31471e72d4ca39ba83804b2f74ad694207b25a (patch) | |
tree | 6644806a1f48ff7a60ea8fc7639f06b30e11ff7e /lldb/source/Core/Debugger.cpp | |
parent | 965de2c197ef28761845f30fc439095778e3865f (diff) | |
download | bcm5719-llvm-5a31471e72d4ca39ba83804b2f74ad694207b25a.tar.gz bcm5719-llvm-5a31471e72d4ca39ba83804b2f74ad694207b25a.zip |
Added the ability to run expressions in any command. Expressions can be
inserted in commands by using backticks:
(lldb) memory read `$rsp-16` `$rsp+16`
(lldb) memory read -c `(int)strlen(argv[0])` `argv[0]`
The result of the expression will be inserted into the command as a sort of
preprocess stage where this gets done first. We might need to tweak where this
preprocess stage goes, but it is very functional already.
Added ansi color support to the Debugger::FormatPrompt() so you can use things
like "${ansi.fg.blue}" and "${ansi.bold}" many more. This helps in adding
colors to your prompts without needing to know the ANSI color code strings.
llvm-svn: 141948
Diffstat (limited to 'lldb/source/Core/Debugger.cpp')
-rw-r--r-- | lldb/source/Core/Debugger.cpp | 210 |
1 files changed, 209 insertions, 1 deletions
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 583c1caf0f9..c27559c3f5e 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -31,7 +31,7 @@ #include "lldb/Target/RegisterContext.h" #include "lldb/Target/StopInfo.h" #include "lldb/Target/Thread.h" - +#include "lldb/Utility/AnsiTerminal.h" using namespace lldb; using namespace lldb_private; @@ -1303,6 +1303,214 @@ Debugger::FormatPrompt format_addr = *addr; } } + else if (::strncmp (var_name_begin, "ansi.", strlen("ansi.")) == 0) + { + var_success = true; + var_name_begin += strlen("ansi."); // Skip the "ansi." + if (::strncmp (var_name_begin, "fg.", strlen("fg.")) == 0) + { + var_name_begin += strlen("fg."); // Skip the "fg." + if (::strncmp (var_name_begin, "black}", strlen("black}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_black, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "red}", strlen("red}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_red, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "green}", strlen("green}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_green, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "yellow}", strlen("yellow}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_yellow, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "blue}", strlen("blue}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_blue, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "purple}", strlen("purple}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_purple, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "cyan}", strlen("cyan}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_cyan, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "white}", strlen("white}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_fg_white, + lldb_utility::ansi::k_escape_end); + } + else + { + var_success = false; + } + } + else if (::strncmp (var_name_begin, "bg.", strlen("bg.")) == 0) + { + var_name_begin += strlen("bg."); // Skip the "bg." + if (::strncmp (var_name_begin, "black}", strlen("black}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_black, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "red}", strlen("red}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_red, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "green}", strlen("green}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_green, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "yellow}", strlen("yellow}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_yellow, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "blue}", strlen("blue}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_blue, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "purple}", strlen("purple}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_purple, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "cyan}", strlen("cyan}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_cyan, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "white}", strlen("white}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_bg_white, + lldb_utility::ansi::k_escape_end); + } + else + { + var_success = false; + } + } + else if (::strncmp (var_name_begin, "normal}", strlen ("normal}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_normal, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "bold}", strlen("bold}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_bold, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "faint}", strlen("faint}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_faint, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "italic}", strlen("italic}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_italic, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "underline}", strlen("underline}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_underline, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "slow-blink}", strlen("slow-blink}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_slow_blink, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "fast-blink}", strlen("fast-blink}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_fast_blink, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "negative}", strlen("negative}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_negative, + lldb_utility::ansi::k_escape_end); + } + else if (::strncmp (var_name_begin, "conceal}", strlen("conceal}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_conceal, + lldb_utility::ansi::k_escape_end); + + } + else if (::strncmp (var_name_begin, "crossed-out}", strlen("crossed-out}")) == 0) + { + s.Printf ("%s%s%s", + lldb_utility::ansi::k_escape_start, + lldb_utility::ansi::k_ctrl_crossed_out, + lldb_utility::ansi::k_escape_end); + } + else + { + var_success = false; + } + } break; case 'p': |