本文整理汇总了C++中Backtrace::ToString方法的典型用法代码示例。如果您正苦于以下问题:C++ Backtrace::ToString方法的具体用法?C++ Backtrace::ToString怎么用?C++ Backtrace::ToString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Backtrace
的用法示例。
在下文中一共展示了Backtrace::ToString方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Assert
void Log::Assert(bool condition, const std::string& message)
{
if (!condition)
{
#ifdef HAS_BFD_DL
Backtrace bt;
Log::Debug << bt.ToString();
#endif
Log::Debug << message << std::endl;
throw std::runtime_error("Log::Assert() failed: " + message);
}
}
示例2: runtime_error
typename std::enable_if<!arma::is_arma_type<T>::value>::type
PrefixedOutStream::BaseLogic(const T& val)
{
// We will use this to track whether or not we need to terminate at the end of
// this call (only for streams which terminate after a newline).
bool newlined = false;
std::string line;
// If we need to, output the prefix.
PrefixIfNeeded();
std::ostringstream convert;
// Sync flags and precision with destination stream
convert.setf(destination.flags());
convert.precision(destination.precision());
convert << val;
if (convert.fail())
{
PrefixIfNeeded();
if (!ignoreInput)
{
destination << "Failed type conversion to string for output; output not "
"shown." << std::endl;
newlined = true;
}
}
else
{
line = convert.str();
// If the length of the casted thing was 0, it may have been a stream
// manipulator, so send it directly to the stream and don't ask questions.
if (line.length() == 0)
{
// The prefix cannot be necessary at this point.
if (!ignoreInput) // Only if the user wants it.
destination << val;
return;
}
// Now, we need to check for newlines in the output and print it.
size_t nl;
size_t pos = 0;
while ((nl = line.find('\n', pos)) != std::string::npos)
{
PrefixIfNeeded();
// Only output if the user wants it.
if (!ignoreInput)
{
destination << line.substr(pos, nl - pos);
destination << std::endl;
}
newlined = true; // Ensure this is set for the fatal exception if needed.
carriageReturned = true; // Regardless of whether or not we display it.
pos = nl + 1;
}
if (pos != line.length()) // We need to display the rest.
{
PrefixIfNeeded();
if (!ignoreInput)
destination << line.substr(pos);
}
}
// If we displayed a newline and we need to throw afterwards, do that.
if (fatal && newlined)
{
if (!ignoreInput)
destination << std::endl;
// Print a backtrace, if we can.
#ifdef HAS_BFD_DL
if (fatal && !ignoreInput && backtrace)
{
size_t nl;
size_t pos = 0;
Backtrace bt;
std::string btLine = bt.ToString();
while ((nl = btLine.find('\n', pos)) != std::string::npos)
{
PrefixIfNeeded();
if (!ignoreInput)
{
destination << btLine.substr(pos, nl - pos);
destination << std::endl;
}
carriageReturned = true; // Regardless of whether or not we display it.
pos = nl + 1;
}
}
//.........这里部分代码省略.........
示例3: BaseLogic
void PrefixedOutStream::BaseLogic(const T& val)
{
// We will use this to track whether or not we need to terminate at the end of
// this call (only for streams which terminate after a newline).
bool newlined = false;
std::string line;
// If we need to, output the prefix.
PrefixIfNeeded();
std::ostringstream convert;
convert << val;
if (convert.fail())
{
PrefixIfNeeded();
if (!ignoreInput)
{
destination << "Failed lexical_cast<std::string>(T) for output; output"
" not shown." << std::endl;
newlined = true;
}
}
else
{
line = convert.str();
// If the length of the casted thing was 0, it may have been a stream
// manipulator, so send it directly to the stream and don't ask questions.
if (line.length() == 0)
{
// The prefix cannot be necessary at this point.
if (!ignoreInput) // Only if the user wants it.
destination << val;
return;
}
// Now, we need to check for newlines in retrieved backtrace.
//If we find one, output up until the newline, then output the newline
//and the prefix and continue looking.
size_t nl;
size_t pos = 0;
#ifdef HAS_BFD_DL
if(fatal)
{
Backtrace bt;
std::string btLine = bt.ToString();
while ((nl = btLine.find('\n', pos)) != std::string::npos)
{
PrefixIfNeeded();
destination << btLine.substr(pos, nl - pos);
destination << std::endl;
newlined = true;
carriageReturned = true; // Regardless of whether or not we display it.
pos = nl + 1;
}
pos = 0;
}
#endif
//The same logic like above, but this time for 'line'.
while ((nl = line.find('\n', pos)) != std::string::npos)
{
PrefixIfNeeded();
// Only output if the user wants it.
if (!ignoreInput)
{
destination << line.substr(pos, nl - pos);
destination << std::endl;
newlined = true;
}
carriageReturned = true; // Regardless of whether or not we display it.
pos = nl + 1;
}
if (pos != line.length()) // We need to display the rest.
{
PrefixIfNeeded();
if (!ignoreInput)
destination << line.substr(pos);
}
}
// If we displayed a newline and we need to throw afterwards, do that.
if (fatal && newlined)
{
std::cout << std::endl;
throw std::runtime_error("fatal error; see Log::Fatal output");
}
}