summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Debugger.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-10-14 07:41:33 +0000
committerGreg Clayton <gclayton@apple.com>2011-10-14 07:41:33 +0000
commit5a31471e72d4ca39ba83804b2f74ad694207b25a (patch)
tree6644806a1f48ff7a60ea8fc7639f06b30e11ff7e /lldb/source/Core/Debugger.cpp
parent965de2c197ef28761845f30fc439095778e3865f (diff)
downloadbcm5719-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.cpp210
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':
OpenPOWER on IntegriCloud