Author: enrico
Date: Wed Nov 13 14:08:30 2013
New Revision: 194600
URL: http://llvm.org/viewvc/llvm-project?rev=194600&view=rev
Log:
Minor improvement to the "memory find" command
Remove the --do-read option, and always provide a small dump of memory at each
match spot
Add a --dump-offset (-o) option, to specify a byte offset from which to start
dumping relative to the matching address
The real solution is to actually provide the format options found on "memory
read" and use those as the key to actually printing memory upon each find
That, however, requires a little refactoring work, so put this in for now until
I get a chance to do the required shuffling around of moving parts
Modified:
lldb/trunk/source/Commands/CommandObjectMemory.cpp
Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp
URL:
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=194600&r1=194599&r2=194600&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Wed Nov 13 14:08:30 2013
@@ -918,12 +918,11 @@ OptionDefinition
g_memory_find_option_table[] =
{
{ LLDB_OPT_SET_1, false, "expression", 'e',
OptionParser::eRequiredArgument, NULL, 0, eArgTypeExpression, "Evaluate an
expression to obtain a byte pattern."},
- { LLDB_OPT_SET_1, false, "string", 's', OptionParser::eRequiredArgument,
NULL, 0, eArgTypeName, "Use text to find a byte pattern."},
- { LLDB_OPT_SET_1, false, "count", 'c', OptionParser::eRequiredArgument,
NULL, 0, eArgTypeCount, "How many times to perform the search."},
- { LLDB_OPT_SET_1, false, "do-read-on-match", 'r',
OptionParser::eNoArgument, NULL, 0, eArgTypeNone, "Should we do a memory read
at each match."},
+ { LLDB_OPT_SET_2, false, "string", 's', OptionParser::eRequiredArgument,
NULL, 0, eArgTypeName, "Use text to find a byte pattern."},
+ { LLDB_OPT_SET_1|LLDB_OPT_SET_2, false, "count", 'c',
OptionParser::eRequiredArgument, NULL, 0, eArgTypeCount, "How many times to
perform the search."},
+ { LLDB_OPT_SET_1|LLDB_OPT_SET_2, false, "dump-offset", 'o',
OptionParser::eRequiredArgument, NULL, 0, eArgTypeOffset, "When dumping
memory for a match, an offset from the match location to start dumping from."},
};
-
//----------------------------------------------------------------------
// Find the specified data in memory
//----------------------------------------------------------------------
@@ -937,7 +936,7 @@ public:
OptionGroupFindMemory () :
OptionGroup(),
m_count(1),
- m_do_read(false)
+ m_offset(0)
{
}
@@ -981,11 +980,11 @@ public:
error.SetErrorString("unrecognized value for count");
break;
-
- case 'r':
- m_do_read.SetValueFromCString("true");
- break;
-
+ case 'o':
+ if (m_offset.SetValueFromCString(option_arg).Fail())
+ error.SetErrorString("unrecognized value for dump-offset");
+ break;
+
default:
error.SetErrorStringWithFormat("unrecognized short option '%c'",
short_option);
break;
@@ -999,13 +998,12 @@ public:
m_expr.Clear();
m_string.Clear();
m_count.Clear();
- m_do_read.Clear();
}
OptionValueString m_expr;
OptionValueString m_string;
OptionValueUInt64 m_count;
- OptionValueBoolean m_do_read;
+ OptionValueUInt64 m_offset;
};
CommandObjectMemoryFind (CommandInterpreter &interpreter) :
@@ -1165,12 +1163,16 @@ protected:
break;
}
result.AppendMessageWithFormat("Your data was found at location:
0x%" PRIx64 "\n", found_location);
- if (m_memory_options.m_do_read.GetCurrentValue())
+
+ DataBufferHeap dumpbuffer(32,0);
+
process->ReadMemory(found_location+m_memory_options.m_offset.GetCurrentValue(),
dumpbuffer.GetBytes(), dumpbuffer.GetByteSize(), error);
+ if (!error.Fail())
{
- StreamString cmd_buffer;
- cmd_buffer.Printf("memory read 0x%" PRIx64, found_location);
- m_interpreter.HandleCommand(cmd_buffer.GetData(), eLazyBoolNo,
result);
+ DataExtractor data(dumpbuffer.GetBytes(),
dumpbuffer.GetByteSize(), process->GetByteOrder(),
process->GetAddressByteSize());
+ data.Dump(&result.GetOutputStream(), 0,
lldb::eFormatBytesWithASCII, 1, dumpbuffer.GetByteSize(), 16,
found_location+m_memory_options.m_offset.GetCurrentValue(), 0, 0);
+ result.GetOutputStream().EOL();
}
+
--count;
found_location++;
ever_found = true;
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits