Add support for displaying the language in the frame-format string.

Enable ${language} to be specified in the frame-format string to see
the current frame's compile unit language in "frame info".

Test Plan:
debug a C++ program, run to main, and run the lldb commands:
    settings set frame-format "frame lang=${language}\n"
    frame info
you should see:
    frame lang=c++
test case added in:
    ./dotest.py --executable lldb -f SettingsCommandTestCase.test_set_frame_format
Reviewers: clayborg
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D10561

llvm-svn: 240440
This commit is contained in:
Dawn Perchik 2015-06-23 18:35:31 +00:00
parent ae3ac08326
commit dc975670c1
4 changed files with 23 additions and 1 deletions

View File

@ -61,6 +61,7 @@ namespace lldb_private
ScriptTarget,
ModuleFile,
File,
Lang,
FrameIndex,
FrameRegisterPC,
FrameRegisterSP,

View File

@ -13,6 +13,7 @@
#include "lldb/Core/Address.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/Language.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/Stream.h"
#include "lldb/Core/StreamString.h"
@ -210,6 +211,7 @@ static FormatEntity::Entry::Definition g_top_level_entries[] =
ENTRY_CHILDREN ("ansi" , Invalid , None , g_ansi_entries),
ENTRY ("current-pc-arrow" , CurrentPCArrow , CString ),
ENTRY_CHILDREN ("file" , File , CString , g_file_child_entries),
ENTRY ("language" , Lang , CString),
ENTRY_CHILDREN ("frame" , Invalid , None , g_frame_child_entries),
ENTRY_CHILDREN ("function" , Invalid , None , g_function_child_entries),
ENTRY_CHILDREN ("line" , Invalid , None , g_line_child_entries),
@ -321,6 +323,7 @@ FormatEntity::Entry::TypeToCString (Type t)
ENUM_TO_CSTR(ScriptTarget);
ENUM_TO_CSTR(ModuleFile);
ENUM_TO_CSTR(File);
ENUM_TO_CSTR(Lang);
ENUM_TO_CSTR(FrameIndex);
ENUM_TO_CSTR(FrameRegisterPC);
ENUM_TO_CSTR(FrameRegisterSP);
@ -1515,6 +1518,23 @@ FormatEntity::Format (const Entry &entry,
}
return false;
case Entry::Type::Lang:
if (sc)
{
CompileUnit *cu = sc->comp_unit;
if (cu)
{
Language lang(cu->GetLanguage());
const char *lang_name = lang.AsCString();
if (lang_name)
{
s.PutCString(lang_name);
return true;
}
}
}
return false;
case Entry::Type::FrameIndex:
if (exe_ctx)
{

View File

@ -129,7 +129,7 @@ class SettingsCommandTestCase(TestBase):
self.format_string = m.group(1)
# Change the default format to print function.name rather than function.name-with-args
format_string = "frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.fullpath}:${line.number}}\n"
format_string = "frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.fullpath}:${line.number}}{, lang=${language}}\n"
self.runCmd("settings set frame-format %s" % format_string)
# Immediately test the setting.

View File

@ -73,6 +73,7 @@
<tr valign=top><td><b>Variable Name</b></td><td><b>Description</b></td></tr>
<tr valign=top><td><b>file.basename</b></td><td>The current compile unit file basename for the current frame.</td></tr>
<tr valign=top><td><b>file.fullpath</b></td><td>The current compile unit file fullpath for the current frame.</td></tr>
<tr valign=top><td><b>language</b></td><td>The current compile unit language for the current frame.</td></tr>
<tr valign=top><td><b>frame.index</b></td><td>The frame index (0, 1, 2, 3...)</td></tr>
<tr valign=top><td><b>frame.pc</b></td><td>The generic frame register for the program counter.</td></tr>
<tr valign=top><td><b>frame.sp</b></td><td>The generic frame register for the stack pointer.</td></tr>