QTest::CrashHandler: add asyncSafeToHexString()
Extracted from existing code; I'm going to need it for some GDB/LLDB commands in an upcoming commit. Change-Id: I7bdb7ef287ecd924df5cfffdc5aa3617540f7756 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
This commit is contained in:
parent
a0c7ca3773
commit
ee04a324ce
@ -184,6 +184,20 @@ std::string_view asyncSafeToString(int n, AsyncSafeIntBuffer &&result = Qt::Unin
|
|||||||
#endif
|
#endif
|
||||||
return std::string_view(result.array.data(), ptr - result.array.data());
|
return std::string_view(result.array.data(), ptr - result.array.data());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::string_view asyncSafeToHexString(quintptr u, char *ptr)
|
||||||
|
{
|
||||||
|
// We format with leading zeroes so the output is of fixed length.
|
||||||
|
// Formatting to shorter is more complex and unnecessary here (unlike
|
||||||
|
// decimals above).
|
||||||
|
int shift = sizeof(quintptr) * 8 - 4;
|
||||||
|
ptr[0] = '0';
|
||||||
|
ptr[1] = 'x';
|
||||||
|
for (size_t i = 0; i < sizeof(quintptr) * 2; ++i, shift -= 4)
|
||||||
|
ptr[i + 2] = QtMiscUtils::toHexLower(u >> shift);
|
||||||
|
|
||||||
|
return std::string_view(ptr, sizeof(quintptr) * 2 + 2);
|
||||||
|
}
|
||||||
} // unnamed namespace
|
} // unnamed namespace
|
||||||
|
|
||||||
namespace QTest {
|
namespace QTest {
|
||||||
@ -422,15 +436,12 @@ printSentSignalInfo(T *info)
|
|||||||
template <typename T> static std::enable_if_t<sizeof(std::declval<T>().si_addr) >= 1>
|
template <typename T> static std::enable_if_t<sizeof(std::declval<T>().si_addr) >= 1>
|
||||||
printCrashingSignalInfo(T *info)
|
printCrashingSignalInfo(T *info)
|
||||||
{
|
{
|
||||||
using HexString = std::array<char, sizeof(quintptr) * 2>;
|
using HexString = std::array<char, sizeof(quintptr) * 2 + 2>;
|
||||||
auto toHexString = [](quintptr u, HexString &&r = {}) {
|
auto toHexString = [](quintptr u, HexString &&r = {}) {
|
||||||
int shift = sizeof(quintptr) * 8 - 4;
|
return asyncSafeToHexString(u, r.data());
|
||||||
for (size_t i = 0; i < sizeof(quintptr) * 2; ++i, shift -= 4)
|
|
||||||
r[i] = QtMiscUtils::toHexLower(u >> shift);
|
|
||||||
return std::string_view(r.data(), r.size());
|
|
||||||
};
|
};
|
||||||
writeToStderr(", code ", asyncSafeToString(info->si_code),
|
writeToStderr(", code ", asyncSafeToString(info->si_code),
|
||||||
", for address 0x", toHexString(quintptr(info->si_addr)));
|
", for address ", toHexString(quintptr(info->si_addr)));
|
||||||
}
|
}
|
||||||
[[maybe_unused]] static void printCrashingSignalInfo(...) {}
|
[[maybe_unused]] static void printCrashingSignalInfo(...) {}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user