mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge pull request #59444 from azat/fix-stripped-stacktraces
Fix stacktraces for binaries without debug symbols
This commit is contained in:
commit
81fe2f330c
@ -211,6 +211,17 @@ function build
|
||||
echo "build_clickhouse_fasttest_binary: [ OK ] $BUILD_SECONDS_ELAPSED sec." \
|
||||
| ts '%Y-%m-%d %H:%M:%S' \
|
||||
| tee "$FASTTEST_OUTPUT/test_result.txt"
|
||||
|
||||
(
|
||||
# This query should fail, and print stacktrace with proper symbol names (even on a stripped binary)
|
||||
clickhouse_output=$(programs/clickhouse-stripped --stacktrace -q 'select' 2>&1 || :)
|
||||
if [[ $clickhouse_output =~ DB::LocalServer::main ]]; then
|
||||
echo "stripped_clickhouse_shows_symbols_names: [ OK ] 0 sec."
|
||||
else
|
||||
echo -e "stripped_clickhouse_shows_symbols_names: [ FAIL ] 0 sec. - clickhouse output:\n\n$clickhouse_output\n"
|
||||
fi
|
||||
) | ts '%Y-%m-%d %H:%M:%S' | tee -a "$FASTTEST_OUTPUT/test_result.txt"
|
||||
|
||||
if [ "$COPY_CLICKHOUSE_BINARY_TO_OUTPUT" -eq "1" ]; then
|
||||
mkdir -p "$FASTTEST_OUTPUT/binaries/"
|
||||
cp programs/clickhouse "$FASTTEST_OUTPUT/binaries/clickhouse"
|
||||
|
@ -317,16 +317,19 @@ constexpr std::pair<std::string_view, std::string_view> replacements[]
|
||||
// Demangle @c symbol_name if it's not from __functional header (as such functions don't provide any useful
|
||||
// information but pollute stack traces).
|
||||
// Replace parts from @c replacements with shorter aliases
|
||||
String demangleAndCollapseNames(std::string_view file, const char * const symbol_name)
|
||||
String demangleAndCollapseNames(std::optional<std::string_view> file, const char * const symbol_name)
|
||||
{
|
||||
if (!symbol_name)
|
||||
return "?";
|
||||
|
||||
std::string_view file_copy = file;
|
||||
if (auto trim_pos = file.find_last_of('/'); trim_pos != file.npos)
|
||||
file_copy.remove_suffix(file.size() - trim_pos);
|
||||
if (file.has_value())
|
||||
{
|
||||
std::string_view file_copy = file.value();
|
||||
if (auto trim_pos = file_copy.find_last_of('/'); trim_pos != file_copy.npos)
|
||||
file_copy.remove_suffix(file_copy.size() - trim_pos);
|
||||
if (file_copy.ends_with("functional"))
|
||||
return "?";
|
||||
}
|
||||
|
||||
String haystack = demangle(symbol_name);
|
||||
|
||||
@ -393,8 +396,8 @@ toStringEveryLineImpl([[maybe_unused]] bool fatal, const StackTraceRefTriple & s
|
||||
if (frame.file.has_value() && frame.line.has_value())
|
||||
out << *frame.file << ':' << *frame.line << ": ";
|
||||
|
||||
if (frame.symbol.has_value() && frame.file.has_value())
|
||||
out << demangleAndCollapseNames(*frame.file, frame.symbol->data());
|
||||
if (frame.symbol.has_value())
|
||||
out << demangleAndCollapseNames(frame.file, frame.symbol->data());
|
||||
else
|
||||
out << "?";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user