本文整理汇总了C++中POSIXThread::EnableHardwareWatchpoint方法的典型用法代码示例。如果您正苦于以下问题:C++ POSIXThread::EnableHardwareWatchpoint方法的具体用法?C++ POSIXThread::EnableHardwareWatchpoint怎么用?C++ POSIXThread::EnableHardwareWatchpoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类POSIXThread
的用法示例。
在下文中一共展示了POSIXThread::EnableHardwareWatchpoint方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lock
Error
ProcessPOSIX::EnableWatchpoint(Watchpoint *wp, bool notify)
{
Error error;
if (wp)
{
user_id_t watchID = wp->GetID();
addr_t addr = wp->GetLoadAddress();
Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_WATCHPOINTS));
if (log)
log->Printf ("ProcessPOSIX::EnableWatchpoint(watchID = %" PRIu64 ")",
watchID);
if (wp->IsEnabled())
{
if (log)
log->Printf("ProcessPOSIX::EnableWatchpoint(watchID = %" PRIu64
") addr = 0x%8.8" PRIx64 ": watchpoint already enabled.",
watchID, (uint64_t)addr);
return error;
}
// Try to find a vacant watchpoint slot in the inferiors' main thread
uint32_t wp_hw_index = LLDB_INVALID_INDEX32;
Mutex::Locker lock(m_thread_list.GetMutex());
POSIXThread *thread = static_cast<POSIXThread*>(
m_thread_list.GetThreadAtIndex(0, false).get());
if (thread)
wp_hw_index = thread->FindVacantWatchpointIndex();
if (wp_hw_index == LLDB_INVALID_INDEX32)
{
error.SetErrorString("Setting hardware watchpoint failed.");
}
else
{
wp->SetHardwareIndex(wp_hw_index);
bool wp_enabled = true;
uint32_t thread_count = m_thread_list.GetSize(false);
for (uint32_t i = 0; i < thread_count; ++i)
{
thread = static_cast<POSIXThread*>(
m_thread_list.GetThreadAtIndex(i, false).get());
if (thread)
wp_enabled &= thread->EnableHardwareWatchpoint(wp);
else
wp_enabled = false;
}
if (wp_enabled)
{
wp->SetEnabled(true, notify);
return error;
}
else
{
// Watchpoint enabling failed on at least one
// of the threads so roll back all of them
DisableWatchpoint(wp, false);
error.SetErrorString("Setting hardware watchpoint failed");
}
}
}
else
error.SetErrorString("Watchpoint argument was NULL.");
return error;
}