本文整理汇总了C++中Error类的典型用法代码示例。如果您正苦于以下问题:C++ Error类的具体用法?C++ Error怎么用?C++ Error使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Error类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateNumChildren
lldb::ValueObjectSP
lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::GetChildAtIndex (size_t idx)
{
lldb::addr_t m_keys_ptr = (m_data_32 ? m_data_32->_keys_addr : m_data_64->_keys_addr);
lldb::addr_t m_values_ptr = (m_data_32 ? m_data_32->_objs_addr : m_data_64->_objs_addr);
uint32_t num_children = CalculateNumChildren();
if (idx >= num_children)
return lldb::ValueObjectSP();
if (m_children.empty())
{
// do the scan phase
lldb::addr_t key_at_idx = 0, val_at_idx = 0;
uint32_t tries = 0;
uint32_t test_idx = 0;
while(tries < num_children)
{
key_at_idx = m_keys_ptr + (test_idx * m_ptr_size);
val_at_idx = m_values_ptr + (test_idx * m_ptr_size);;
ProcessSP process_sp = m_exe_ctx_ref.GetProcessSP();
if (!process_sp)
return lldb::ValueObjectSP();
Error error;
key_at_idx = process_sp->ReadPointerFromMemory(key_at_idx, error);
if (error.Fail())
return lldb::ValueObjectSP();
val_at_idx = process_sp->ReadPointerFromMemory(val_at_idx, error);
if (error.Fail())
return lldb::ValueObjectSP();
test_idx++;
if (!key_at_idx || !val_at_idx)
continue;
tries++;
DictionaryItemDescriptor descriptor = {key_at_idx,val_at_idx,lldb::ValueObjectSP()};
m_children.push_back(descriptor);
}
}
if (idx >= m_children.size()) // should never happen
return lldb::ValueObjectSP();
DictionaryItemDescriptor &dict_item = m_children[idx];
if (!dict_item.valobj_sp)
{
if (!m_pair_type.IsValid())
{
TargetSP target_sp(m_backend.GetTargetSP());
if (!target_sp)
return ValueObjectSP();
m_pair_type = GetLLDBNSPairType(target_sp);
}
if (!m_pair_type.IsValid())
return ValueObjectSP();
DataBufferSP buffer_sp(new DataBufferHeap(2*m_ptr_size,0));
if (m_ptr_size == 8)
{
uint64_t *data_ptr = (uint64_t *)buffer_sp->GetBytes();
*data_ptr = dict_item.key_ptr;
*(data_ptr+1) = dict_item.val_ptr;
}
else
{
uint32_t *data_ptr = (uint32_t *)buffer_sp->GetBytes();
*data_ptr = dict_item.key_ptr;
*(data_ptr+1) = dict_item.val_ptr;
}
StreamString idx_name;
idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data(buffer_sp, m_order, m_ptr_size);
dict_item.valobj_sp = ValueObject::CreateValueObjectFromData(idx_name.GetData(), data, m_exe_ctx_ref, m_pair_type);
}
return dict_item.valobj_sp;
}
示例2:
Error::Error( const Error &src )
: runtime_error( src.what() )
{
++src.data->usageCount;
data = src.data;
}
示例3: fileDialog
void CFlyCap2MFCDoc::OnFileSaveAs()
{
Error error;
CString csMessage;
JPEGOption JPEG_Save_Option;
PNGOption PNG_Save_Option;
m_beingSaved = true;
// Define the list of filters to include in the SaveAs dialog.
const unsigned int uiNumFilters = 8;
const CString arcsFilter[uiNumFilters] = {
"Windows Bitmap (*.bmp)|*.bmp" ,
"Portable Pixelmap (*.ppm)|*.ppm" ,
"Portable Greymap (raw image) (*.pgm)|*.pgm" ,
"Independent JPEG Group (*.jpg, *.jpeg)|*.jpg; *.jpeg" ,
"Tagged Image File Format (*.tiff)|*.tiff" ,
"Portable Network Graphics (*.png)|*.png" ,
"Raw data (*.raw)|*.raw" ,
"All Files (*.*)|*.*" };
CString csFilters;
// Keep track of which filter should be selected as default.
// m_uiFilterIndex is set to what was previously used (0 if this is first time).
for ( int i = 0; i < (uiNumFilters - 1); i++ )
{
csFilters += arcsFilter[(m_uiFilterIndex + i) % (uiNumFilters - 1)];
csFilters += "|";
}
// Always finish with All Files and a ||.
csFilters += arcsFilter[uiNumFilters - 1];
csFilters += "||";
time_t rawtime;
struct tm * timeinfo;
time( &rawtime );
timeinfo = localtime( &rawtime );
char timestamp[64];
strftime( timestamp, 64, "%Y-%m-%d-%H%M%S", timeinfo );
char tempFilename[128];
sprintf( tempFilename, "%u-%s", m_cameraInfo.serialNumber, timestamp );
CFileDialog fileDialog(
FALSE,
"bmp",
tempFilename,
OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT,
csFilters,
AfxGetMainWnd() );
if( fileDialog.DoModal() == IDOK )
{
CString csExt = fileDialog.GetFileExt();
// Save the filter index for the next time
if( csExt.CompareNoCase("bmp") == 0 )
{
m_uiFilterIndex = 0;
}
else if( csExt.CompareNoCase("ppm") == 0 )
{
m_uiFilterIndex = 1;
}
else if( csExt.CompareNoCase("pgm") == 0 )
{
m_uiFilterIndex = 2;
}
else if( csExt.CompareNoCase("jpeg") == 0 || csExt.CompareNoCase("jpg") == 0 )
{
m_uiFilterIndex = 3;
JPEG_Save_Option.progressive = false;
JPEG_Save_Option.quality = 100; //Superb quality.
}
else if( csExt.CompareNoCase("tiff") == 0 )
{
m_uiFilterIndex = 4;
}
else if( csExt.CompareNoCase("png") == 0 )
{
m_uiFilterIndex = 5;
PNG_Save_Option.interlaced = false;
PNG_Save_Option.compressionLevel = 9; //Best compression
}
else if( csExt.CompareNoCase("raw") == 0 )
{
m_uiFilterIndex = 6;
}
else
{
AfxMessageBox( "Invalid file type" );
}
switch ( m_uiFilterIndex )
{
case 0:
case 1:
case 2:
//.........这里部分代码省略.........
示例4: LogError
void
LogError(const char *msg, const Error &error)
{
LogFormat("%s: %s", msg, error.GetMessage());
}
示例5: locker
size_t
MemoryCache::Read (addr_t addr,
void *dst,
size_t dst_len,
Error &error)
{
size_t bytes_left = dst_len;
// If this memory read request is larger than the cache line size, then
// we (1) try to read as much of it at once as possible, and (2) don't
// add the data to the memory cache. We don't want to split a big read
// up into more separate reads than necessary, and with a large memory read
// request, it is unlikely that the caller function will ask for the next
// 4 bytes after the large memory read - so there's little benefit to saving
// it in the cache.
if (dst && dst_len > m_cache_line_byte_size)
{
return m_process.ReadMemoryFromInferior (addr, dst, dst_len, error);
}
if (dst && bytes_left > 0)
{
const uint32_t cache_line_byte_size = m_cache_line_byte_size;
uint8_t *dst_buf = (uint8_t *)dst;
addr_t curr_addr = addr - (addr % cache_line_byte_size);
addr_t cache_offset = addr - curr_addr;
Mutex::Locker locker (m_mutex);
while (bytes_left > 0)
{
if (m_invalid_ranges.FindEntryThatContains(curr_addr))
{
error.SetErrorStringWithFormat("memory read failed for 0x%" PRIx64, curr_addr);
return dst_len - bytes_left;
}
BlockMap::const_iterator pos = m_cache.find (curr_addr);
BlockMap::const_iterator end = m_cache.end ();
if (pos != end)
{
size_t curr_read_size = cache_line_byte_size - cache_offset;
if (curr_read_size > bytes_left)
curr_read_size = bytes_left;
memcpy (dst_buf + dst_len - bytes_left, pos->second->GetBytes() + cache_offset, curr_read_size);
bytes_left -= curr_read_size;
curr_addr += curr_read_size + cache_offset;
cache_offset = 0;
if (bytes_left > 0)
{
// Get sequential cache page hits
for (++pos; (pos != end) && (bytes_left > 0); ++pos)
{
assert ((curr_addr % cache_line_byte_size) == 0);
if (pos->first != curr_addr)
break;
curr_read_size = pos->second->GetByteSize();
if (curr_read_size > bytes_left)
curr_read_size = bytes_left;
memcpy (dst_buf + dst_len - bytes_left, pos->second->GetBytes(), curr_read_size);
bytes_left -= curr_read_size;
curr_addr += curr_read_size;
// We have a cache page that succeeded to read some bytes
// but not an entire page. If this happens, we must cap
// off how much data we are able to read...
if (pos->second->GetByteSize() != cache_line_byte_size)
return dst_len - bytes_left;
}
}
}
// We need to read from the process
if (bytes_left > 0)
{
assert ((curr_addr % cache_line_byte_size) == 0);
std::unique_ptr<DataBufferHeap> data_buffer_heap_ap(new DataBufferHeap (cache_line_byte_size, 0));
size_t process_bytes_read = m_process.ReadMemoryFromInferior (curr_addr,
data_buffer_heap_ap->GetBytes(),
data_buffer_heap_ap->GetByteSize(),
error);
if (process_bytes_read == 0)
return dst_len - bytes_left;
if (process_bytes_read != cache_line_byte_size)
data_buffer_heap_ap->SetByteSize (process_bytes_read);
m_cache[curr_addr] = DataBufferSP (data_buffer_heap_ap.release());
// We have read data and put it into the cache, continue through the
// loop again to get the data out of the cache...
}
}
}
//.........这里部分代码省略.........
示例6: shell_info_sp
Error Host::RunShellCommand(const Args &args, const FileSpec &working_dir,
int *status_ptr, int *signo_ptr,
std::string *command_output_ptr,
uint32_t timeout_sec, bool run_in_default_shell) {
Error error;
ProcessLaunchInfo launch_info;
launch_info.SetArchitecture(HostInfo::GetArchitecture());
if (run_in_default_shell) {
// Run the command in a shell
launch_info.SetShell(HostInfo::GetDefaultShell());
launch_info.GetArguments().AppendArguments(args);
const bool localhost = true;
const bool will_debug = false;
const bool first_arg_is_full_shell_command = false;
launch_info.ConvertArgumentsForLaunchingInShell(
error, localhost, will_debug, first_arg_is_full_shell_command, 0);
} else {
// No shell, just run it
const bool first_arg_is_executable = true;
launch_info.SetArguments(args, first_arg_is_executable);
}
if (working_dir)
launch_info.SetWorkingDirectory(working_dir);
llvm::SmallString<PATH_MAX> output_file_path;
if (command_output_ptr) {
// Create a temporary file to get the stdout/stderr and redirect the
// output of the command into this file. We will later read this file
// if all goes well and fill the data into "command_output_ptr"
FileSpec tmpdir_file_spec;
if (HostInfo::GetLLDBPath(ePathTypeLLDBTempSystemDir, tmpdir_file_spec)) {
tmpdir_file_spec.AppendPathComponent("lldb-shell-output.%%%%%%");
llvm::sys::fs::createUniqueFile(tmpdir_file_spec.GetPath().c_str(),
output_file_path);
} else {
llvm::sys::fs::createTemporaryFile("lldb-shell-output.%%%%%%", "",
output_file_path);
}
}
FileSpec output_file_spec{output_file_path.c_str(), false};
launch_info.AppendSuppressFileAction(STDIN_FILENO, true, false);
if (output_file_spec) {
launch_info.AppendOpenFileAction(STDOUT_FILENO, output_file_spec, false,
true);
launch_info.AppendDuplicateFileAction(STDOUT_FILENO, STDERR_FILENO);
} else {
launch_info.AppendSuppressFileAction(STDOUT_FILENO, false, true);
launch_info.AppendSuppressFileAction(STDERR_FILENO, false, true);
}
std::shared_ptr<ShellInfo> shell_info_sp(new ShellInfo());
const bool monitor_signals = false;
launch_info.SetMonitorProcessCallback(
std::bind(MonitorShellCommand, shell_info_sp, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3,
std::placeholders::_4),
monitor_signals);
error = LaunchProcess(launch_info);
const lldb::pid_t pid = launch_info.GetProcessID();
if (error.Success() && pid == LLDB_INVALID_PROCESS_ID)
error.SetErrorString("failed to get process ID");
if (error.Success()) {
bool timed_out = false;
shell_info_sp->process_reaped.WaitForValueEqualTo(
true, std::chrono::seconds(timeout_sec), &timed_out);
if (timed_out) {
error.SetErrorString("timed out waiting for shell command to complete");
// Kill the process since it didn't complete within the timeout specified
Kill(pid, SIGKILL);
// Wait for the monitor callback to get the message
timed_out = false;
shell_info_sp->process_reaped.WaitForValueEqualTo(
true, std::chrono::seconds(1), &timed_out);
} else {
if (status_ptr)
*status_ptr = shell_info_sp->status;
if (signo_ptr)
*signo_ptr = shell_info_sp->signo;
if (command_output_ptr) {
command_output_ptr->clear();
uint64_t file_size = output_file_spec.GetByteSize();
if (file_size > 0) {
if (file_size > command_output_ptr->max_size()) {
error.SetErrorStringWithFormat(
"shell command output is too large to fit into a std::string");
} else {
std::vector<char> command_output(file_size);
output_file_spec.ReadFileContents(0, command_output.data(),
file_size, &error);
if (error.Success())
command_output_ptr->assign(command_output.data(), file_size);
//.........这里部分代码省略.........
示例7: switch
bool Host::AddPosixSpawnFileAction(void *_file_actions, const FileAction *info,
Log *log, Error &error) {
if (info == NULL)
return false;
posix_spawn_file_actions_t *file_actions =
reinterpret_cast<posix_spawn_file_actions_t *>(_file_actions);
switch (info->GetAction()) {
case FileAction::eFileActionNone:
error.Clear();
break;
case FileAction::eFileActionClose:
if (info->GetFD() == -1)
error.SetErrorString(
"invalid fd for posix_spawn_file_actions_addclose(...)");
else {
error.SetError(
::posix_spawn_file_actions_addclose(file_actions, info->GetFD()),
eErrorTypePOSIX);
if (log && (error.Fail() || log))
error.PutToLog(log,
"posix_spawn_file_actions_addclose (action=%p, fd=%i)",
static_cast<void *>(file_actions), info->GetFD());
}
break;
case FileAction::eFileActionDuplicate:
if (info->GetFD() == -1)
error.SetErrorString(
"invalid fd for posix_spawn_file_actions_adddup2(...)");
else if (info->GetActionArgument() == -1)
error.SetErrorString(
"invalid duplicate fd for posix_spawn_file_actions_adddup2(...)");
else {
error.SetError(
::posix_spawn_file_actions_adddup2(file_actions, info->GetFD(),
info->GetActionArgument()),
eErrorTypePOSIX);
if (log && (error.Fail() || log))
error.PutToLog(
log,
"posix_spawn_file_actions_adddup2 (action=%p, fd=%i, dup_fd=%i)",
static_cast<void *>(file_actions), info->GetFD(),
info->GetActionArgument());
}
break;
case FileAction::eFileActionOpen:
if (info->GetFD() == -1)
error.SetErrorString(
"invalid fd in posix_spawn_file_actions_addopen(...)");
else {
int oflag = info->GetActionArgument();
mode_t mode = 0;
if (oflag & O_CREAT)
mode = 0640;
error.SetError(::posix_spawn_file_actions_addopen(
file_actions, info->GetFD(),
info->GetPath().str().c_str(), oflag, mode),
eErrorTypePOSIX);
if (error.Fail() || log)
error.PutToLog(log, "posix_spawn_file_actions_addopen (action=%p, "
"fd=%i, path='%s', oflag=%i, mode=%i)",
static_cast<void *>(file_actions), info->GetFD(),
info->GetPath().str().c_str(), oflag, mode);
}
break;
}
return error.Success();
}
示例8: g_TypeHint
bool
lldb_private::formatters::CFBagSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
{
static ConstString g_TypeHint("CFBag");
ProcessSP process_sp = valobj.GetProcessSP();
if (!process_sp)
return false;
ObjCLanguageRuntime* runtime = (ObjCLanguageRuntime*)process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
if (!runtime)
return false;
ObjCLanguageRuntime::ClassDescriptorSP descriptor(runtime->GetClassDescriptor(valobj));
if (!descriptor.get() || !descriptor->IsValid())
return false;
uint32_t ptr_size = process_sp->GetAddressByteSize();
lldb::addr_t valobj_addr = valobj.GetValueAsUnsigned(0);
if (!valobj_addr)
return false;
uint32_t count = 0;
bool is_type_ok = false; // check to see if this is a CFBag we know about
if (descriptor->IsCFType())
{
ConstString type_name(valobj.GetTypeName());
if (type_name == ConstString("__CFBag") || type_name == ConstString("const struct __CFBag"))
{
if (valobj.IsPointerType())
is_type_ok = true;
}
}
if (is_type_ok == false)
{
StackFrameSP frame_sp(valobj.GetFrameSP());
if (!frame_sp)
return false;
ValueObjectSP count_sp;
StreamString expr;
expr.Printf("(int)CFBagGetCount((void*)0x%" PRIx64 ")",valobj.GetPointerValue());
EvaluateExpressionOptions options;
options.SetResultIsInternal(true);
if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp, options) != eExpressionCompleted)
return false;
if (!count_sp)
return false;
count = count_sp->GetValueAsUnsigned(0);
}
else
{
uint32_t offset = 2*ptr_size+4 + valobj_addr;
Error error;
count = process_sp->ReadUnsignedIntegerFromMemory(offset, 4, 0, error);
if (error.Fail())
return false;
}
std::string prefix,suffix;
if (Language* language = Language::FindPlugin(options.GetLanguage()))
{
if (!language->GetFormatterPrefixSuffix(valobj, g_TypeHint, prefix, suffix))
{
prefix.clear();
suffix.clear();
}
}
stream.Printf("%s\"%u value%s\"%s",
prefix.c_str(),
count,(count == 1 ? "" : "s"),
suffix.c_str());
return true;
}
示例9: Error
Error
NativeRegisterContextLinux_s390x::WriteRegister(const RegisterInfo *reg_info, const RegisterValue ®_value)
{
if (!reg_info)
return Error("reg_info NULL");
const uint32_t reg = reg_info->kinds[lldb::eRegisterKindLLDB];
if (reg == LLDB_INVALID_REGNUM)
return Error("register \"%s\" is an internal-only lldb register, cannot write directly", reg_info->name);
if (IsGPR(reg))
{
s390_regs regs;
Error error = DoReadGPR(®s, sizeof(regs));
if (error.Fail())
return error;
uint8_t *dst = (uint8_t *)®s + reg_info->byte_offset;
assert(reg_info->byte_offset + reg_info->byte_size <= sizeof(regs));
switch (reg_info->byte_size)
{
case 4:
*(uint32_t *)dst = reg_value.GetAsUInt32();
break;
case 8:
*(uint64_t *)dst = reg_value.GetAsUInt64();
break;
default:
assert(false && "Unhandled data size.");
return Error("unhandled byte size: %" PRIu32, reg_info->byte_size);
}
return DoWriteGPR(®s, sizeof(regs));
}
if (IsFPR(reg))
{
s390_fp_regs fp_regs;
Error error = DoReadFPR(&fp_regs, sizeof(fp_regs));
if (error.Fail())
return error;
// byte_offset is just the offset within fp_regs, not the whole user area.
uint8_t *dst = (uint8_t *)&fp_regs + reg_info->byte_offset;
assert(reg_info->byte_offset + reg_info->byte_size <= sizeof(fp_regs));
switch (reg_info->byte_size)
{
case 4:
*(uint32_t *)dst = reg_value.GetAsUInt32();
break;
case 8:
*(uint64_t *)dst = reg_value.GetAsUInt64();
break;
default:
assert(false && "Unhandled data size.");
return Error("unhandled byte size: %" PRIu32, reg_info->byte_size);
}
return DoWriteFPR(&fp_regs, sizeof(fp_regs));
}
if (reg == lldb_last_break_s390x)
{
return Error("The last break address is read-only");
}
if (reg == lldb_system_call_s390x)
{
uint32_t system_call = reg_value.GetAsUInt32();
return DoWriteRegisterSet(NT_S390_SYSTEM_CALL, &system_call, 4);
}
return Error("failed - register wasn't recognized");
}
示例10: readGraphite
bool Silf::readGraphite(const byte * const silf_start, size_t lSilf, Face& face, uint32 version)
{
const byte * p = silf_start,
* const silf_end = p + lSilf;
Error e;
if (e.test(version >= 0x00060000, E_BADSILFVERSION))
{
releaseBuffers(); return face.error(e);
}
if (version >= 0x00030000)
{
if (e.test(lSilf < 28, E_BADSIZE)) { releaseBuffers(); return face.error(e); }
be::skip<int32>(p); // ruleVersion
be::skip<uint16>(p,2); // passOffset & pseudosOffset
}
else if (e.test(lSilf < 20, E_BADSIZE)) { releaseBuffers(); return face.error(e); }
const uint16 maxGlyph = be::read<uint16>(p);
m_silfinfo.extra_ascent = be::read<uint16>(p);
m_silfinfo.extra_descent = be::read<uint16>(p);
m_numPasses = be::read<uint8>(p);
m_sPass = be::read<uint8>(p);
m_pPass = be::read<uint8>(p);
m_jPass = be::read<uint8>(p);
m_bPass = be::read<uint8>(p);
m_flags = be::read<uint8>(p);
be::skip<uint8>(p,2); // max{Pre,Post}Context.
m_aPseudo = be::read<uint8>(p);
m_aBreak = be::read<uint8>(p);
m_aBidi = be::read<uint8>(p);
m_aMirror = be::read<uint8>(p);
m_aPassBits = be::read<uint8>(p);
// Read Justification levels.
m_numJusts = be::read<uint8>(p);
if (e.test(maxGlyph >= face.glyphs().numGlyphs(), E_BADMAXGLYPH)
|| e.test(p + m_numJusts * 8 >= silf_end, E_BADNUMJUSTS))
{
releaseBuffers(); return face.error(e);
}
if (m_numJusts)
{
m_justs = gralloc<Justinfo>(m_numJusts);
if (e.test(!m_justs, E_OUTOFMEM)) return face.error(e);
for (uint8 i = 0; i < m_numJusts; i++)
{
::new(m_justs + i) Justinfo(p[0], p[1], p[2], p[3]);
be::skip<byte>(p,8);
}
}
if (e.test(p + sizeof(uint16) + sizeof(uint8)*8 >= silf_end, E_BADENDJUSTS)) { releaseBuffers(); return face.error(e); }
m_aLig = be::read<uint16>(p);
m_aUser = be::read<uint8>(p);
m_iMaxComp = be::read<uint8>(p);
m_dir = be::read<uint8>(p) - 1;
m_aCollision = be::read<uint8>(p);
be::skip<byte>(p,3);
be::skip<uint16>(p, be::read<uint8>(p)); // don't need critical features yet
be::skip<byte>(p); // reserved
if (e.test(p >= silf_end, E_BADCRITFEATURES)) { releaseBuffers(); return face.error(e); }
be::skip<uint32>(p, be::read<uint8>(p)); // don't use scriptTag array.
if (e.test(p + sizeof(uint16) + sizeof(uint32) >= silf_end, E_BADSCRIPTTAGS)) { releaseBuffers(); return face.error(e); }
m_gEndLine = be::read<uint16>(p); // lbGID
const byte * o_passes = p,
* const passes_start = silf_start + be::read<uint32>(p);
const size_t num_attrs = face.glyphs().numAttrs();
if (e.test(m_aPseudo >= num_attrs, E_BADAPSEUDO)
|| e.test(m_aBreak >= num_attrs, E_BADABREAK)
|| e.test(m_aBidi >= num_attrs, E_BADABIDI)
|| e.test(m_aMirror>= num_attrs, E_BADAMIRROR)
|| e.test(m_aCollision && m_aCollision >= num_attrs - 5, E_BADACOLLISION)
|| e.test(m_numPasses > 128, E_BADNUMPASSES) || e.test(passes_start >= silf_end, E_BADPASSESSTART)
|| e.test(m_pPass < m_sPass, E_BADPASSBOUND) || e.test(m_pPass > m_numPasses, E_BADPPASS) || e.test(m_sPass > m_numPasses, E_BADSPASS)
|| e.test(m_jPass < m_pPass, E_BADJPASSBOUND) || e.test(m_jPass > m_numPasses, E_BADJPASS)
|| e.test((m_bPass != 0xFF && (m_bPass < m_jPass || m_bPass > m_numPasses)), E_BADBPASS)
|| e.test(m_aLig > 127, E_BADALIG))
{
releaseBuffers();
return face.error(e);
}
be::skip<uint32>(p, m_numPasses);
if (e.test(p + sizeof(uint16) >= passes_start, E_BADPASSESSTART)) { releaseBuffers(); return face.error(e); }
m_numPseudo = be::read<uint16>(p);
be::skip<uint16>(p, 3); // searchPseudo, pseudoSelector, pseudoShift
m_pseudos = new Pseudo[m_numPseudo];
if (e.test(p + m_numPseudo*(sizeof(uint32) + sizeof(uint16)) >= passes_start, E_BADNUMPSEUDO)
|| e.test(!m_pseudos, E_OUTOFMEM))
{
releaseBuffers(); return face.error(e);
}
for (int i = 0; i < m_numPseudo; i++)
{
m_pseudos[i].uid = be::read<uint32>(p);
m_pseudos[i].gid = be::read<uint16>(p);
}
//.........这里部分代码省略.........
示例11: descriptor
bool
lldb_private::formatters::CFBitVectorSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
{
ProcessSP process_sp = valobj.GetProcessSP();
if (!process_sp)
return false;
ObjCLanguageRuntime* runtime = (ObjCLanguageRuntime*)process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
if (!runtime)
return false;
ObjCLanguageRuntime::ClassDescriptorSP descriptor(runtime->GetClassDescriptor(valobj));
if (!descriptor.get() || !descriptor->IsValid())
return false;
uint32_t ptr_size = process_sp->GetAddressByteSize();
lldb::addr_t valobj_addr = valobj.GetValueAsUnsigned(0);
if (!valobj_addr)
return false;
uint32_t count = 0;
bool is_type_ok = false; // check to see if this is a CFBag we know about
if (descriptor->IsCFType())
{
ConstString type_name(valobj.GetTypeName());
if (type_name == ConstString("__CFMutableBitVector") || type_name == ConstString("__CFBitVector") || type_name == ConstString("CFMutableBitVectorRef") || type_name == ConstString("CFBitVectorRef"))
{
if (valobj.IsPointerType())
is_type_ok = true;
}
}
if (is_type_ok == false)
return false;
Error error;
count = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr+2*ptr_size, ptr_size, 0, error);
if (error.Fail())
return false;
uint64_t num_bytes = count / 8 + ((count & 7) ? 1 : 0);
addr_t data_ptr = process_sp->ReadPointerFromMemory(valobj_addr+2*ptr_size+2*ptr_size, error);
if (error.Fail())
return false;
// make sure we do not try to read huge amounts of data
if (num_bytes > 1024)
num_bytes = 1024;
DataBufferSP buffer_sp(new DataBufferHeap(num_bytes,0));
num_bytes = process_sp->ReadMemory(data_ptr, buffer_sp->GetBytes(), num_bytes, error);
if (error.Fail() || num_bytes == 0)
return false;
uint8_t *bytes = buffer_sp->GetBytes();
for (uint64_t byte_idx = 0; byte_idx < num_bytes-1; byte_idx++)
{
uint8_t byte = bytes[byte_idx];
bool bit0 = (byte & 1) == 1;
bool bit1 = (byte & 2) == 2;
bool bit2 = (byte & 4) == 4;
bool bit3 = (byte & 8) == 8;
bool bit4 = (byte & 16) == 16;
bool bit5 = (byte & 32) == 32;
bool bit6 = (byte & 64) == 64;
bool bit7 = (byte & 128) == 128;
stream.Printf("%c%c%c%c %c%c%c%c ",
(bit7 ? '1' : '0'),
(bit6 ? '1' : '0'),
(bit5 ? '1' : '0'),
(bit4 ? '1' : '0'),
(bit3 ? '1' : '0'),
(bit2 ? '1' : '0'),
(bit1 ? '1' : '0'),
(bit0 ? '1' : '0'));
count -= 8;
}
{
// print the last byte ensuring we do not print spurious bits
uint8_t byte = bytes[num_bytes-1];
bool bit0 = (byte & 1) == 1;
bool bit1 = (byte & 2) == 2;
bool bit2 = (byte & 4) == 4;
bool bit3 = (byte & 8) == 8;
bool bit4 = (byte & 16) == 16;
bool bit5 = (byte & 32) == 32;
bool bit6 = (byte & 64) == 64;
bool bit7 = (byte & 128) == 128;
if (count)
{
stream.Printf("%c",bit7 ? '1' : '0');
count -= 1;
}
if (count)
{
stream.Printf("%c",bit6 ? '1' : '0');
count -= 1;
}
if (count)
//.........这里部分代码省略.........
示例12: entered
// For local debugging, Linux will override the debug logic to use llgs-launch rather than
// lldb-launch, llgs-attach. This differs from current lldb-launch, debugserver-attach
// approach on MacOSX.
lldb::ProcessSP
PlatformLinux::DebugProcess (ProcessLaunchInfo &launch_info,
Debugger &debugger,
Target *target, // Can be NULL, if NULL create a new target, else use existing one
Error &error)
{
Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_PLATFORM));
if (log)
log->Printf ("PlatformLinux::%s entered (target %p)", __FUNCTION__, static_cast<void*>(target));
// If we're a remote host, use standard behavior from parent class.
if (!IsHost ())
return PlatformPOSIX::DebugProcess (launch_info, debugger, target, error);
//
// For local debugging, we'll insist on having ProcessGDBRemote create the process.
//
ProcessSP process_sp;
// Make sure we stop at the entry point
launch_info.GetFlags ().Set (eLaunchFlagDebug);
// We always launch the process we are going to debug in a separate process
// group, since then we can handle ^C interrupts ourselves w/o having to worry
// about the target getting them as well.
launch_info.SetLaunchInSeparateProcessGroup(true);
// Ensure we have a target.
if (target == nullptr)
{
if (log)
log->Printf ("PlatformLinux::%s creating new target", __FUNCTION__);
TargetSP new_target_sp;
error = debugger.GetTargetList().CreateTarget (debugger,
nullptr,
nullptr,
false,
nullptr,
new_target_sp);
if (error.Fail ())
{
if (log)
log->Printf ("PlatformLinux::%s failed to create new target: %s", __FUNCTION__, error.AsCString ());
return process_sp;
}
target = new_target_sp.get();
if (!target)
{
error.SetErrorString ("CreateTarget() returned nullptr");
if (log)
log->Printf ("PlatformLinux::%s failed: %s", __FUNCTION__, error.AsCString ());
return process_sp;
}
}
else
{
if (log)
log->Printf ("PlatformLinux::%s using provided target", __FUNCTION__);
}
// Mark target as currently selected target.
debugger.GetTargetList().SetSelectedTarget(target);
// Now create the gdb-remote process.
if (log)
log->Printf ("PlatformLinux::%s having target create process with gdb-remote plugin", __FUNCTION__);
process_sp = target->CreateProcess (launch_info.GetListenerForProcess(debugger), "gdb-remote", nullptr);
if (!process_sp)
{
error.SetErrorString ("CreateProcess() failed for gdb-remote process");
if (log)
log->Printf ("PlatformLinux::%s failed: %s", __FUNCTION__, error.AsCString ());
return process_sp;
}
else
{
if (log)
log->Printf ("PlatformLinux::%s successfully created process", __FUNCTION__);
}
// Adjust launch for a hijacker.
ListenerSP listener_sp;
if (!launch_info.GetHijackListener ())
{
if (log)
log->Printf ("PlatformLinux::%s setting up hijacker", __FUNCTION__);
listener_sp = Listener::MakeListener("lldb.PlatformLinux.DebugProcess.hijack");
launch_info.SetHijackListener (listener_sp);
process_sp->HijackProcessEvents (listener_sp);
}
// Log file actions.
//.........这里部分代码省略.........
示例13: resolved_module_spec
Error
PlatformLinux::ResolveExecutable (const ModuleSpec &ms,
lldb::ModuleSP &exe_module_sp,
const FileSpecList *module_search_paths_ptr)
{
Error error;
// Nothing special to do here, just use the actual file and architecture
char exe_path[PATH_MAX];
ModuleSpec resolved_module_spec (ms);
if (IsHost())
{
// If we have "ls" as the exe_file, resolve the executable location based on
// the current path variables
if (!resolved_module_spec.GetFileSpec().Exists())
{
resolved_module_spec.GetFileSpec().GetPath(exe_path, sizeof(exe_path));
resolved_module_spec.GetFileSpec().SetFile(exe_path, true);
}
if (!resolved_module_spec.GetFileSpec().Exists())
resolved_module_spec.GetFileSpec().ResolveExecutableLocation ();
if (resolved_module_spec.GetFileSpec().Exists())
error.Clear();
else
{
error.SetErrorStringWithFormat("unable to find executable for '%s'", resolved_module_spec.GetFileSpec().GetPath().c_str());
}
}
else
{
if (m_remote_platform_sp)
{
error = GetCachedExecutable (resolved_module_spec, exe_module_sp, module_search_paths_ptr, *m_remote_platform_sp);
}
else
{
// We may connect to a process and use the provided executable (Don't use local $PATH).
if (resolved_module_spec.GetFileSpec().Exists())
error.Clear();
else
error.SetErrorStringWithFormat("the platform is not currently connected, and '%s' doesn't exist in the system root.", exe_path);
}
}
if (error.Success())
{
if (resolved_module_spec.GetArchitecture().IsValid())
{
error = ModuleList::GetSharedModule (resolved_module_spec,
exe_module_sp,
NULL,
NULL,
NULL);
if (error.Fail())
{
// If we failed, it may be because the vendor and os aren't known. If that is the
// case, try setting them to the host architecture and give it another try.
llvm::Triple &module_triple = resolved_module_spec.GetArchitecture().GetTriple();
bool is_vendor_specified = (module_triple.getVendor() != llvm::Triple::UnknownVendor);
bool is_os_specified = (module_triple.getOS() != llvm::Triple::UnknownOS);
if (!is_vendor_specified || !is_os_specified)
{
const llvm::Triple &host_triple = HostInfo::GetArchitecture(HostInfo::eArchKindDefault).GetTriple();
if (!is_vendor_specified)
module_triple.setVendorName (host_triple.getVendorName());
if (!is_os_specified)
module_triple.setOSName (host_triple.getOSName());
error = ModuleList::GetSharedModule (resolved_module_spec,
exe_module_sp,
NULL,
NULL,
NULL);
}
}
// TODO find out why exe_module_sp might be NULL
if (!exe_module_sp || exe_module_sp->GetObjectFile() == NULL)
{
exe_module_sp.reset();
error.SetErrorStringWithFormat ("'%s' doesn't contain the architecture %s",
resolved_module_spec.GetFileSpec().GetPath().c_str(),
resolved_module_spec.GetArchitecture().GetArchitectureName());
}
}
else
{
// No valid architecture was specified, ask the platform for
// the architectures that we should be using (in the correct order)
// and see if we can find a match that way
StreamString arch_names;
for (uint32_t idx = 0; GetSupportedArchitectureAtIndex (idx, resolved_module_spec.GetArchitecture()); ++idx)
{
error = ModuleList::GetSharedModule (resolved_module_spec,
exe_module_sp,
//.........这里部分代码省略.........
示例14: drawTerrainData
//.........这里部分代码省略.........
/*
if (Broodwar->self())
{
Unitset myUnits = Broodwar->self()->getUnits();
for (auto u : myUnits)
{
if (u->isIdle() && u->getType().isResourceDepot())
u->train(u->getType().getRace().getWorker());
}
}
*/
// If the unit is a worker unit
if (u->getType().isWorker())
{
// if our worker is idle
if (u->isIdle())
{
// Order workers carrying a resource to return them to the center,
// otherwise find a mineral patch to harvest.
if (u->isCarryingGas() || u->isCarryingMinerals())
{
u->returnCargo();
}
else if (!u->getPowerUp()) // The worker cannot harvest anything if it
{ // is carrying a powerup such as a flag
// Harvest from the nearest mineral patch or gas refinery
if (!u->gather(u->getClosestUnit(IsMineralField))) // IsRefinery
{
// If the call fails, then print the last error message
Broodwar << Broodwar->getLastError() << std::endl;
}
} // closure: has no powerup
} // closure: if idle
}
else if (u->getType().isResourceDepot()) // A resource depot is a Command Center, Nexus, or Hatchery
{
// Order the depot to construct more workers! But only when it is idle.
if (u->isIdle() && ProbeCount < 40) // && !u->train(u->getType().getRace().getWorker())
{
u->train(u->getType().getRace().getWorker());
// If that fails, draw the error at the location so that you can visibly see what went wrong!
// However, drawing the error once will only appear for a single frame
// so create an event that keeps it on the screen for some frames
// Position homePosition = Position(Broodwar->self()->getStartLocation());
}
Position pos = u->getPosition();
Error lastErr = Broodwar->getLastError();
Broodwar->registerEvent([pos, lastErr](Game*){ Broodwar->drawTextMap(pos, "%c%s", Text::White, lastErr.c_str()); }, // action
nullptr, // condition
Broodwar->getLatencyFrames()); // frames to run
// Retrieve the supply provider type in the case that we have run out of supplies
UnitType supplyProviderType = u->getType().getRace().getSupplyProvider();
static int lastChecked = 0;
// If we are supply blocked and haven't tried constructing more recently
if (lastErr == Errors::Insufficient_Supply &&
示例15: LOG_ERROR_MESSAGE
core::ProgramStatus Options::read(int argc, char * const argv[])
{
using namespace boost::program_options ;
// get the shared secret
monitorSharedSecret_ = core::system::getenv(kMonitorSharedSecretEnvVar);
core::system::unsetenv(kMonitorSharedSecretEnvVar);
// compute the resource path
FilePath resourcePath;
Error error = core::system::installPath("..", argv[0], &resourcePath);
if (error)
{
LOG_ERROR_MESSAGE("Unable to determine install path: "+error.summary());
return ProgramStatus::exitFailure();
}
// detect running in OSX bundle and tweak resource path
#ifdef __APPLE__
if (resourcePath.complete("Info.plist").exists())
resourcePath = resourcePath.complete("Resources");
#endif
// detect running in x64 directory and tweak resource path
#ifdef _WIN32
if (resourcePath.complete("x64").exists())
resourcePath = resourcePath.parent();
#endif
// verify installation flag
options_description verify("verify");
verify.add_options()
(kVerifyInstallationSessionOption,
value<bool>(&verifyInstallation_)->default_value(false),
"verify the current installation");
// program - name and execution
options_description program("program");
program.add_options()
(kProgramModeSessionOption,
value<std::string>(&programMode_)->default_value("server"),
"program mode (desktop or server");
// agreement
options_description agreement("agreement");
agreement.add_options()
("agreement-file",
value<std::string>(&agreementFilePath_)->default_value(""),
"agreement file");
// docs url
options_description docs("docs");
docs.add_options()
("docs-url",
value<std::string>(&docsURL_)->default_value(""),
"custom docs url");
// www options
options_description www("www") ;
www.add_options()
("www-local-path",
value<std::string>(&wwwLocalPath_)->default_value("www"),
"www local path")
("www-symbol-maps-path",
value<std::string>(&wwwSymbolMapsPath_)->default_value(
"www-symbolmaps"),
"www symbol maps path")
("www-port",
value<std::string>(&wwwPort_)->default_value("8787"),
"port to listen on");
// session options
std::string saveActionDefault;
options_description session("session") ;
session.add_options()
(kTimeoutSessionOption,
value<int>(&timeoutMinutes_)->default_value(120),
"session timeout (minutes)" )
(kDisconnectedTimeoutSessionOption,
value<int>(&disconnectedTimeoutMinutes_)->default_value(0),
"session disconnected timeout (minutes)" )
("session-preflight-script",
value<std::string>(&preflightScript_)->default_value(""),
"session preflight script")
("session-create-public-folder",
value<bool>(&createPublicFolder_)->default_value(false),
"automatically create public folder")
("session-rprofile-on-resume-default",
value<bool>(&rProfileOnResumeDefault_)->default_value(false),
"default user setting for running Rprofile on resume")
("session-save-action-default",
value<std::string>(&saveActionDefault)->default_value(""),
"default save action (yes, no, or ask)");
// allow options
options_description allow("allow");
allow.add_options()
("allow-vcs-executable-edit",
value<bool>(&allowVcsExecutableEdit_)->default_value(true),
"allow editing of vcs executables")
//.........这里部分代码省略.........