SocketAddress logging
authorSachin Kadloor <skadloor@fb.com>
Fri, 31 Oct 2014 17:58:47 +0000 (10:58 -0700)
committerPavlo Kushnir <pavlo@fb.com>
Sat, 8 Nov 2014 02:19:51 +0000 (18:19 -0800)
Summary:
Better logging in SocketAddress

Test Plan: run it

Reviewed By: qwu@fb.com

Subscribers: ps, bmatheny, xning

FB internal diff: D1644573

Tasks: 5406091

Signature: t1:1644573:1414626398:1e23ee85ec8ee0be89cb6bdc07da23978b4d988a

folly/SocketAddress.cpp

index f624b3a605bc6534d053861b650b545c351fb237..0f9b9d16ca03e2515c8b783f363d05d66577fc0f 100644 (file)
@@ -29,6 +29,9 @@
 #include <errno.h>
 #include <sstream>
 #include <string>
+#include <execinfo.h>
+#include <stdio.h>
+#include <stdlib.h>
 
 namespace {
 
@@ -543,6 +546,14 @@ size_t SocketAddress::hash() const {
       break;
     case AF_UNSPEC:
     default:
+      void *array[20];
+      size_t size;
+      // get void*'s for all entries on the stack
+      size = backtrace(array, 20);
+      // print out all the frames to stderr
+      fprintf(stderr, "Exception: \n");
+      backtrace_symbols_fd(array, size, STDERR_FILENO);
+      LOG(FATAL) << "Invalid ip address: " << describe();
       throw std::invalid_argument(
         "SocketAddress: unsupported address family "
         "for hashing");