本文整理汇总了C++中Status::SetErrorStringWithFormat方法的典型用法代码示例。如果您正苦于以下问题:C++ Status::SetErrorStringWithFormat方法的具体用法?C++ Status::SetErrorStringWithFormat怎么用?C++ Status::SetErrorStringWithFormat使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Status
的用法示例。
在下文中一共展示了Status::SetErrorStringWithFormat方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Materialize
void Materialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
lldb::addr_t process_address, Status &err) override {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
const lldb::addr_t load_addr = process_address + m_offset;
if (log) {
log->Printf("EntityRegister::Materialize [address = 0x%" PRIx64
", m_register_info = %s]",
(uint64_t)load_addr, m_register_info.name);
}
RegisterValue reg_value;
if (!frame_sp.get()) {
err.SetErrorStringWithFormat(
"couldn't materialize register %s without a stack frame",
m_register_info.name);
return;
}
lldb::RegisterContextSP reg_context_sp = frame_sp->GetRegisterContext();
if (!reg_context_sp->ReadRegister(&m_register_info, reg_value)) {
err.SetErrorStringWithFormat("couldn't read the value of register %s",
m_register_info.name);
return;
}
DataExtractor register_data;
if (!reg_value.GetData(register_data)) {
err.SetErrorStringWithFormat("couldn't get the data for register %s",
m_register_info.name);
return;
}
if (register_data.GetByteSize() != m_register_info.byte_size) {
err.SetErrorStringWithFormat(
"data for register %s had size %llu but we expected %llu",
m_register_info.name, (unsigned long long)register_data.GetByteSize(),
(unsigned long long)m_register_info.byte_size);
return;
}
m_register_contents.reset(new DataBufferHeap(register_data.GetDataStart(),
register_data.GetByteSize()));
Status write_error;
map.WriteMemory(load_addr, register_data.GetDataStart(),
register_data.GetByteSize(), write_error);
if (!write_error.Success()) {
err.SetErrorStringWithFormat(
"couldn't write the contents of register %s: %s",
m_register_info.name, write_error.AsCString());
return;
}
}
示例2: StringIsBreakpointName
bool BreakpointID::StringIsBreakpointName(llvm::StringRef str, Status &error) {
error.Clear();
if (str.empty())
{
error.SetErrorStringWithFormat("Empty breakpoint names are not allowed");
return false;
}
// First character must be a letter or _
if (!isalpha(str[0]) && str[0] != '_')
{
error.SetErrorStringWithFormat("Breakpoint names must start with a "
"character or underscore: %s",
str.str().c_str());
return false;
}
// Cannot contain ., -, or space.
if (str.find_first_of(".- ") != llvm::StringRef::npos) {
error.SetErrorStringWithFormat("Breakpoint names cannot contain "
"'.' or '-': \"%s\"",
str.str().c_str());
return false;
}
return true;
}
示例3: MakeAllocation
void MakeAllocation(IRMemoryMap &map, Status &err) {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
// Allocate a spare memory area to store the persistent variable's contents.
Status allocate_error;
const bool zero_memory = false;
lldb::addr_t mem = map.Malloc(
m_persistent_variable_sp->GetByteSize(), 8,
lldb::ePermissionsReadable | lldb::ePermissionsWritable,
IRMemoryMap::eAllocationPolicyMirror, zero_memory, allocate_error);
if (!allocate_error.Success()) {
err.SetErrorStringWithFormat(
"couldn't allocate a memory area to store %s: %s",
m_persistent_variable_sp->GetName().GetCString(),
allocate_error.AsCString());
return;
}
if (log)
log->Printf("Allocated %s (0x%" PRIx64 ") successfully",
m_persistent_variable_sp->GetName().GetCString(), mem);
// Put the location of the spare memory into the live data of the
// ValueObject.
m_persistent_variable_sp->m_live_sp = ValueObjectConstResult::Create(
map.GetBestExecutionContextScope(),
m_persistent_variable_sp->GetCompilerType(),
m_persistent_variable_sp->GetName(), mem, eAddressTypeLoad,
map.GetAddressByteSize());
// Clear the flag if the variable will never be deallocated.
if (m_persistent_variable_sp->m_flags &
ExpressionVariable::EVKeepInTarget) {
Status leak_error;
map.Leak(mem, leak_error);
m_persistent_variable_sp->m_flags &=
~ExpressionVariable::EVNeedsAllocation;
}
// Write the contents of the variable to the area.
Status write_error;
map.WriteMemory(mem, m_persistent_variable_sp->GetValueBytes(),
m_persistent_variable_sp->GetByteSize(), write_error);
if (!write_error.Success()) {
err.SetErrorStringWithFormat(
"couldn't write %s to the target: %s",
m_persistent_variable_sp->GetName().AsCString(),
write_error.AsCString());
return;
}
}
示例4: if
lldb::OptionValueSP
OptionValueArray::GetSubValue(const ExecutionContext *exe_ctx,
llvm::StringRef name, bool will_modify,
Status &error) const {
if (name.empty() || name.front() != '[') {
error.SetErrorStringWithFormat(
"invalid value path '%s', %s values only support '[<index>]' subvalues "
"where <index> is a positive or negative array index",
name.str().c_str(), GetTypeAsCString());
return nullptr;
}
name = name.drop_front();
llvm::StringRef index, sub_value;
std::tie(index, sub_value) = name.split(']');
if (index.size() == name.size()) {
// Couldn't find a closing bracket
return nullptr;
}
const size_t array_count = m_values.size();
int32_t idx = 0;
if (index.getAsInteger(0, idx))
return nullptr;
uint32_t new_idx = UINT32_MAX;
if (idx < 0) {
// Access from the end of the array if the index is negative
new_idx = array_count - idx;
} else {
// Just a standard index
new_idx = idx;
}
if (new_idx < array_count) {
if (m_values[new_idx]) {
if (!sub_value.empty())
return m_values[new_idx]->GetSubValue(exe_ctx, sub_value,
will_modify, error);
else
return m_values[new_idx];
}
} else {
if (array_count == 0)
error.SetErrorStringWithFormat(
"index %i is not valid for an empty array", idx);
else if (idx > 0)
error.SetErrorStringWithFormat(
"index %i out of range, valid values are 0 through %" PRIu64,
idx, (uint64_t)(array_count - 1));
else
error.SetErrorStringWithFormat("negative index %i out of range, "
"valid values are -1 through "
"-%" PRIu64,
idx, (uint64_t)array_count);
}
return OptionValueSP();
}
示例5: Dematerialize
void Dematerialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
lldb::addr_t process_address, lldb::addr_t frame_top,
lldb::addr_t frame_bottom, Status &err) override {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
const lldb::addr_t load_addr = process_address + m_offset;
if (log) {
log->Printf("EntityRegister::Dematerialize [address = 0x%" PRIx64
", m_register_info = %s]",
(uint64_t)load_addr, m_register_info.name);
}
Status extract_error;
DataExtractor register_data;
if (!frame_sp.get()) {
err.SetErrorStringWithFormat(
"couldn't dematerialize register %s without a stack frame",
m_register_info.name);
return;
}
lldb::RegisterContextSP reg_context_sp = frame_sp->GetRegisterContext();
map.GetMemoryData(register_data, load_addr, m_register_info.byte_size,
extract_error);
if (!extract_error.Success()) {
err.SetErrorStringWithFormat("couldn't get the data for register %s: %s",
m_register_info.name,
extract_error.AsCString());
return;
}
if (!memcmp(register_data.GetDataStart(), m_register_contents->GetBytes(),
register_data.GetByteSize())) {
// No write required, and in particular we avoid errors if the register
// wasn't writable
m_register_contents.reset();
return;
}
m_register_contents.reset();
RegisterValue register_value(
const_cast<uint8_t *>(register_data.GetDataStart()),
register_data.GetByteSize(), register_data.GetByteOrder());
if (!reg_context_sp->WriteRegister(&m_register_info, register_value)) {
err.SetErrorStringWithFormat("couldn't write the value of register %s",
m_register_info.name);
return;
}
}
示例6: GetRegisterInfoInterface
Status NativeRegisterContextLinux_mips64::WriteAllRegisterValues(
const lldb::DataBufferSP &data_sp) {
Status error;
if (!data_sp) {
error.SetErrorStringWithFormat(
"NativeRegisterContextLinux_mips64::%s invalid data_sp provided",
__FUNCTION__);
return error;
}
if (data_sp->GetByteSize() != REG_CONTEXT_SIZE) {
error.SetErrorStringWithFormat(
"NativeRegisterContextLinux_mips64::%s data_sp contained mismatched "
"data size, expected %" PRIu64 ", actual %" PRIu64,
__FUNCTION__, REG_CONTEXT_SIZE, data_sp->GetByteSize());
return error;
}
uint8_t *src = data_sp->GetBytes();
if (src == nullptr) {
error.SetErrorStringWithFormat("NativeRegisterContextLinux_mips64::%s "
"DataBuffer::GetBytes() returned a null "
"pointer",
__FUNCTION__);
return error;
}
::memcpy(&m_gpr, src, GetRegisterInfoInterface().GetGPRSize());
src += GetRegisterInfoInterface().GetGPRSize();
::memcpy(&m_fpr, src, GetFPRSize());
src += GetFPRSize();
::memcpy(&m_msa, src, sizeof(MSA_linux_mips));
error = WriteGPR();
if (!error.Success()) {
error.SetErrorStringWithFormat(
"NativeRegisterContextLinux_mips64::%s WriteGPR() failed",
__FUNCTION__);
return error;
}
error = WriteCP1();
if (!error.Success()) {
error.SetErrorStringWithFormat(
"NativeRegisterContextLinux_mips64::%s WriteCP1() failed",
__FUNCTION__);
return error;
}
return error;
}
示例7: GetTypeAsCString
lldb::OptionValueSP
OptionValueDictionary::GetSubValue(const ExecutionContext *exe_ctx,
llvm::StringRef name, bool will_modify,
Status &error) const {
lldb::OptionValueSP value_sp;
if (name.empty())
return nullptr;
llvm::StringRef left, temp;
std::tie(left, temp) = name.split('[');
if (left.size() == name.size()) {
error.SetErrorStringWithFormat("invalid value path '%s', %s values only "
"support '[<key>]' subvalues where <key> "
"a string value optionally delimited by "
"single or double quotes",
name.str().c_str(), GetTypeAsCString());
return nullptr;
}
assert(!temp.empty());
llvm::StringRef key, quote_char;
if (temp[0] == '\"' || temp[0] == '\'') {
quote_char = temp.take_front();
temp = temp.drop_front();
}
llvm::StringRef sub_name;
std::tie(key, sub_name) = temp.split(']');
if (!key.consume_back(quote_char) || key.empty()) {
error.SetErrorStringWithFormat("invalid value path '%s', "
"key names must be formatted as ['<key>'] where <key> "
"is a string that doesn't contain quotes and the quote"
" char is optional", name.str().c_str());
return nullptr;
}
value_sp = GetValueForKey(ConstString(key));
if (!value_sp) {
error.SetErrorStringWithFormat(
"dictionary does not contain a value for the key name '%s'",
key.str().c_str());
return nullptr;
}
if (sub_name.empty())
return value_sp;
return value_sp->GetSubValue(exe_ctx, sub_name, will_modify, error);
}
示例8: switch
Status OptionValueUInt64::SetValueFromString(llvm::StringRef value_ref,
VarSetOperationType op) {
Status error;
switch (op) {
case eVarSetOperationClear:
Clear();
NotifyValueChanged();
break;
case eVarSetOperationReplace:
case eVarSetOperationAssign: {
bool success = false;
std::string value_str = value_ref.trim().str();
uint64_t value = StringConvert::ToUInt64(value_str.c_str(), 0, 0, &success);
if (success) {
m_value_was_set = true;
m_current_value = value;
NotifyValueChanged();
} else {
error.SetErrorStringWithFormat("invalid uint64_t string value: '%s'",
value_str.c_str());
}
} break;
case eVarSetOperationInsertBefore:
case eVarSetOperationInsertAfter:
case eVarSetOperationRemove:
case eVarSetOperationAppend:
case eVarSetOperationInvalid:
error = OptionValue::SetValueFromString(value_ref, op);
break;
}
return error;
}
示例9: switch
Status
OptionGroupPlatform::SetOptionValue(uint32_t option_idx,
llvm::StringRef option_arg,
ExecutionContext *execution_context) {
Status error;
if (!m_include_platform_option)
++option_idx;
const int short_option = g_option_table[option_idx].short_option;
switch (short_option) {
case 'p':
m_platform_name.assign(option_arg);
break;
case 'v':
if (m_os_version.tryParse(option_arg))
error.SetErrorStringWithFormatv("invalid version string '{0}'",
option_arg);
break;
case 'b':
m_sdk_build.SetString(option_arg);
break;
case 'S':
m_sdk_sysroot.SetString(option_arg);
break;
default:
error.SetErrorStringWithFormat("unrecognized option '%c'", short_option);
break;
}
return error;
}
示例10: DoAllocateMemory
addr_t ProcessFreeBSD::DoAllocateMemory(size_t size, uint32_t permissions,
Status &error) {
addr_t allocated_addr = LLDB_INVALID_ADDRESS;
unsigned prot = 0;
if (permissions & lldb::ePermissionsReadable)
prot |= eMmapProtRead;
if (permissions & lldb::ePermissionsWritable)
prot |= eMmapProtWrite;
if (permissions & lldb::ePermissionsExecutable)
prot |= eMmapProtExec;
if (InferiorCallMmap(this, allocated_addr, 0, size, prot,
eMmapFlagsAnon | eMmapFlagsPrivate, -1, 0)) {
m_addr_to_mmap_size[allocated_addr] = size;
error.Clear();
} else {
allocated_addr = LLDB_INVALID_ADDRESS;
error.SetErrorStringWithFormat(
"unable to allocate %zu bytes of memory with permissions %s", size,
GetPermissionsAsCString(permissions));
}
return allocated_addr;
}
示例11: SendRequestWriteMemory
uint32_t CommunicationKDP::SendRequestWriteMemory(lldb::addr_t addr,
const void *src,
uint32_t src_len,
Status &error) {
PacketStreamType request_packet(Stream::eBinary, m_addr_byte_size,
m_byte_order);
bool use_64 = (GetVersion() >= 11);
uint32_t command_addr_byte_size = use_64 ? 8 : 4;
const CommandType command = use_64 ? KDP_WRITEMEM64 : KDP_WRITEMEM;
// Size is header + address size + uint32_t length
const uint32_t command_length = 8 + command_addr_byte_size + 4 + src_len;
MakeRequestPacketHeader(command, request_packet, command_length);
request_packet.PutMaxHex64(addr, command_addr_byte_size);
request_packet.PutHex32(src_len);
request_packet.PutRawBytes(src, src_len);
DataExtractor reply_packet;
if (SendRequestAndGetReply(command, request_packet, reply_packet)) {
lldb::offset_t offset = 8;
uint32_t kdp_error = reply_packet.GetU32(&offset);
if (kdp_error)
error.SetErrorStringWithFormat("kdp write memory failed (error %u)",
kdp_error);
else {
error.Clear();
return src_len;
}
} else {
error.SetErrorString("failed to send packet");
}
return 0;
}
示例12: SendRawRequest
bool CommunicationKDP::SendRawRequest(
uint8_t command_byte,
const void *src, // Raw packet payload bytes
uint32_t src_len, // Raw packet payload length
DataExtractor &reply_packet, Status &error) {
PacketStreamType request_packet(Stream::eBinary, m_addr_byte_size,
m_byte_order);
// Size is header + address size + uint32_t length
const uint32_t command_length = 8 + src_len;
const CommandType command = (CommandType)command_byte;
MakeRequestPacketHeader(command, request_packet, command_length);
request_packet.PutRawBytes(src, src_len);
if (SendRequestAndGetReply(command, request_packet, reply_packet)) {
lldb::offset_t offset = 8;
uint32_t kdp_error = reply_packet.GetU32(&offset);
if (kdp_error && (command_byte != KDP_DUMPINFO))
error.SetErrorStringWithFormat("request packet 0x%8.8x failed (error %u)",
command_byte, kdp_error);
else {
error.Clear();
return true;
}
} else {
error.SetErrorString("failed to send packet");
}
return false;
}
示例13: SendRequestWriteRegisters
uint32_t CommunicationKDP::SendRequestWriteRegisters(uint32_t cpu,
uint32_t flavor,
const void *src,
uint32_t src_len,
Status &error) {
PacketStreamType request_packet(Stream::eBinary, m_addr_byte_size,
m_byte_order);
const CommandType command = KDP_WRITEREGS;
// Size is header + 4 byte cpu and 4 byte flavor
const uint32_t command_length = 8 + 4 + 4 + src_len;
MakeRequestPacketHeader(command, request_packet, command_length);
request_packet.PutHex32(cpu);
request_packet.PutHex32(flavor);
request_packet.Write(src, src_len);
DataExtractor reply_packet;
if (SendRequestAndGetReply(command, request_packet, reply_packet)) {
lldb::offset_t offset = 8;
uint32_t kdp_error = reply_packet.GetU32(&offset);
if (kdp_error == 0)
return src_len;
error.SetErrorStringWithFormat(
"failed to read kdp registers for cpu %u flavor %u (error %u)", cpu,
flavor, kdp_error);
} else {
error.SetErrorString("failed to send packet");
}
return 0;
}
示例14: SetValueFromString
Status OptionValueChar::SetValueFromString(llvm::StringRef value,
VarSetOperationType op) {
Status error;
switch (op) {
case eVarSetOperationClear:
Clear();
break;
case eVarSetOperationReplace:
case eVarSetOperationAssign: {
bool success = false;
char char_value = OptionArgParser::ToChar(value, '\0', &success);
if (success) {
m_current_value = char_value;
m_value_was_set = true;
} else
error.SetErrorStringWithFormat("'%s' cannot be longer than 1 character",
value.str().c_str());
} break;
default:
error = OptionValue::SetValueFromString(value, op);
break;
}
return error;
}
示例15: CreateFromStructuredData
lldb::SearchFilterSP SearchFilterByModuleListAndCU::CreateFromStructuredData(
Target &target, const StructuredData::Dictionary &data_dict,
Status &error) {
StructuredData::Array *modules_array = nullptr;
SearchFilterSP result_sp;
bool success = data_dict.GetValueForKeyAsArray(GetKey(OptionNames::ModList),
modules_array);
FileSpecList modules;
if (success) {
size_t num_modules = modules_array->GetSize();
for (size_t i = 0; i < num_modules; i++) {
llvm::StringRef module;
success = modules_array->GetItemAtIndexAsString(i, module);
if (!success) {
error.SetErrorStringWithFormat(
"SFBM::CFSD: filter module item %zu not a string.", i);
return result_sp;
}
modules.Append(FileSpec(module));
}
}
StructuredData::Array *cus_array = nullptr;
success =
data_dict.GetValueForKeyAsArray(GetKey(OptionNames::CUList), cus_array);
if (!success) {
error.SetErrorString("SFBM::CFSD: Could not find the CU list key.");
return result_sp;
}
size_t num_cus = cus_array->GetSize();
FileSpecList cus;
for (size_t i = 0; i < num_cus; i++) {
llvm::StringRef cu;
success = cus_array->GetItemAtIndexAsString(i, cu);
if (!success) {
error.SetErrorStringWithFormat(
"SFBM::CFSD: filter cu item %zu not a string.", i);
return nullptr;
}
cus.Append(FileSpec(cu));
}
return std::make_shared<SearchFilterByModuleListAndCU>(
target.shared_from_this(), modules, cus);
}