From 4cddfedf53647cb9b515a7c979b4c6da76a99460 Mon Sep 17 00:00:00 2001 From: Jason Molenda Date: Fri, 5 Oct 2012 05:29:32 +0000 Subject: [PATCH] Change the "bt" command alias defined in CommandInterpreter::LoadCommandDictionary. It is now a regex command alias that more faithfully emulates gdb's behavior, most importantly, "bt 5" will backtrace 5 frames of the currently selected thread. "bt all" still backtraces all threads (unlike gdb) and for users who have learned to use "bt -c 5", that form is still accepted. llvm-svn: 165300 --- lldb/source/Interpreter/CommandInterpreter.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp index 44ba511..c387c3d 100644 --- a/lldb/source/Interpreter/CommandInterpreter.cpp +++ b/lldb/source/Interpreter/CommandInterpreter.cpp @@ -156,10 +156,6 @@ CommandInterpreter::Initialize () if (cmd_obj_sp) AddAlias ("b", cmd_obj_sp); - cmd_obj_sp = GetCommandSPExact ("thread backtrace", false); - if (cmd_obj_sp) - AddAlias ("bt", cmd_obj_sp); - cmd_obj_sp = GetCommandSPExact ("thread step-inst", false); if (cmd_obj_sp) { @@ -494,6 +490,26 @@ CommandInterpreter::LoadCommandDictionary () } } + std::auto_ptr + bt_regex_cmd_ap(new CommandObjectRegexCommand (*this, + "bt", + "Show a backtrace. An optional argument is accepted; if that argument is a number, it specifies the number of frames to display. If that argument is 'all', full backtraces of all threads are displayed.", + "bt [|all]", 2)); + if (bt_regex_cmd_ap.get()) + { + // accept but don't document "bt -c " -- before bt was a regex command if you wanted to backtrace + // three frames you would do "bt -c 3" but the intention is to have this emulate the gdb "bt" command and + // so now "bt 3" is the preferred form, in line with gdb. + if (bt_regex_cmd_ap->AddRegexCommand("^([[:digit:]]+)$", "thread backtrace -c %1") && + bt_regex_cmd_ap->AddRegexCommand("^-c ([[:digit:]]+)$", "thread backtrace -c %1") && + bt_regex_cmd_ap->AddRegexCommand("^all$", "thread backtrace all") && + bt_regex_cmd_ap->AddRegexCommand("^$", "thread backtrace")) + { + CommandObjectSP command_sp(bt_regex_cmd_ap.release()); + m_command_dict[command_sp->GetCommandName ()] = command_sp; + } + } + } int -- 2.7.4