From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 35585 invoked by alias); 30 Mar 2019 00:35:10 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 35548 invoked by uid 89); 30 Mar 2019 00:35:09 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,KAM_SHORT,RCVD_IN_DNSWL_NONE,URIBL_BLOCKED autolearn=ham version=3.3.1 spammy=H*r:dyn.plus.net, vat, v.at, _m_range_check X-HELO: mail-wr1-f50.google.com Received: from mail-wr1-f50.google.com (HELO mail-wr1-f50.google.com) (209.85.221.50) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 30 Mar 2019 00:35:07 +0000 Received: by mail-wr1-f50.google.com with SMTP id y13so4638553wrd.3 for ; Fri, 29 Mar 2019 17:35:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jguk-org.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=NIPjql1+qE4dNQxEf/QrE4UavVZNfS7jyE5snxOXF7s=; b=fRKTNwkzTPhPMaQYP9rGcReqmw1Sdw6HXTI0m379rlRmguQ9JOy0iEv4ouq38CG5fV ANOoU/fhMLMbyD3T8/31cdi8whMiFaEyNw3iE43iSOA7DZvoyY1bEw3hADvWTHtHrv1P 6gxSm9juSA27iJYeyTnDmHt73UbmKq4L/JldrNxQsDx6yySoHkSnC9XoaeS7hHQTF0bA 0N/GMZl9gNYYTtmkPV5a/U4Xl9RTbmAchQTPFz45Kz2+u4WlNIvjbfmjSRVnZvvqf05z UpxuBo4pbMakbqwG92IAI5Z5SiArVhvOyaE6kywJWhhf8kx+MMAKSklcr1O5bSDMtAXR 6oXw== Return-Path: Received: from [192.168.1.71] (251.98.189.80.dyn.plus.net. [80.189.98.251]) by smtp.gmail.com with ESMTPSA id v1sm4332952wrd.47.2019.03.29.17.35.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Mar 2019 17:35:03 -0700 (PDT) Subject: Re: Recursive SIGSEGV question From: Jonny Grant To: Xi Ruoyao Cc: Jonathan Wakely , Florian Weimer , Andrew Haley , gcc-help References: <1255ee27-882f-ab4e-ea45-ba6f35791b45@jguk.org> <877ecuikq9.fsf@mid.deneb.enyo.de> <835d09ce-752a-c0f7-e5cf-210e855df2ab@jguk.org> <87ef6vkq8a.fsf@mid.deneb.enyo.de> <95ff2a72-47fb-5cc3-5852-08517e3ce76e@redhat.com> <87bm1yho61.fsf@mid.deneb.enyo.de> <490f5b68-a9a9-943e-6485-28c0fd51835d@jguk.org> <3f191a23-97c3-3f40-3760-8f41074901e0@jguk.org> Message-ID: <979bb085-1f08-1c40-df77-5d9e5512f184@jguk.org> Date: Sat, 30 Mar 2019 17:32:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <3f191a23-97c3-3f40-3760-8f41074901e0@jguk.org> Content-Type: multipart/mixed; boundary="------------6C577A54B93658178DFBE547" X-SW-Source: 2019-03/txt/msg00223.txt.bz2 This is a multi-part message in MIME format. --------------6C577A54B93658178DFBE547 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 944 Hi! Just sharing the little backtrace sample I made using addr2line and libc backtrace_symbols(). The backtrace doesn't appear to be completely accurate, but it is something. The file goes from 22KB (as you found Xi!) to 87KB on my 64bit ubuntu machine when I add -g. So I'm pleased with this, better than Go's 1,997,502 byte backtrace then? $ ./exception4 Unhandled C++ exception: [vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)] Backtrace: 0x00000000000014de: test() at exception4.cpp:75 [1]: ./exception4(+0x14de) [0x563bd5b804de] 0x0000000000001550: main at exception4.cpp:87 [2]: ./exception4(+0x1550) [0x563bd5b80550] 0x0000000000000000: ?? ??:0 [3]: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f1d0c52bb97] 0x0000000000000fea: _start at ??:? [4]: ./exception4(+0xfea) [0x563bd5b7ffea] Could GCC insert something similar using libc backtrace_symbols() with an -fcrash-handler ? Jonny --------------6C577A54B93658178DFBE547 Content-Type: text/x-c++src; name="exception4.cpp" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="exception4.cpp" Content-length: 2001 // g++-8 -Wall -g -o exception4 exception4.cpp #include #include #include #include #include #include int main2(); /* Obtain a backtrace and print it to stdout. https://www.gnu.org/software/libc/manual/html_node/Backtraces.html */ void print_trace(void) { void *array[10]; const size_t size = backtrace (array, 10); char **strings = backtrace_symbols (array, size); //printf ("Obtained %zd stack frames.\n", size); printf("\nBacktrace:\n"); // skip first, as it is this handler for (size_t i = 1; i < size; i++) { // extract the exe name std::string exe(strings[i]); { const size_t s = exe.find("("); if(std::string::npos != s) { exe.erase(s, exe.length()); } } // extract the address std::string addr(strings[i]); { size_t s = addr.find("("); if(std::string::npos != s) { ++s; addr.erase(0, s); s = addr.find(")"); if(std::string::npos != s) { addr.erase(s, addr.length()); } } } //printf("exe '%s' addr '%s'\n", exe.c_str(), addr.c_str()); char syscom[256]; sprintf(syscom,"addr2line -s -a -p -f -C -e %s %s", exe.c_str(), addr.c_str()); //printf("%s\n", syscom); system(syscom); printf ("[%zu]: %s\n", i, strings[i]); } free (strings); } void test() { try { main2(); } catch( const std::exception &e) { const std::string what(e.what()); std::cout << "Unhandled C++ exception: [" << e.what() << "]\n"; print_trace(); //char * p = NULL; //*p = 1; } } int main(int argc, const char * argv[]) { test(); } int main2() { std::vector v; return v.at(0); } --------------6C577A54B93658178DFBE547--