From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25953 invoked by alias); 19 Nov 2014 07:09:00 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 25943 invoked by uid 89); 19 Nov 2014 07:08:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: Yes, score=6.9 required=5.0 tests=AWL,BAYES_40,CHARSET_FARAWAY_HEADER,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FROM_EXCESS_BASE64,MIME_BASE64_BLANKS,MIME_CHARSET_FARAWAY,RCVD_IN_DNSWL_NONE,SPF_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: smtpbgau1.qq.com Received: from smtpbgau1.qq.com (HELO smtpbgau1.qq.com) (54.206.16.166) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Wed, 19 Nov 2014 07:08:53 +0000 X-QQ-FEAT: SWrNel1Aia7LV8uLYsv6JxhE55dMkggRqt8HLBNmYJ8sPlH/cuiZaWXmx+4OW a4NuZPMux1K087WB86fDlaJfVjpTc3wFx2hrMoRHWhSUnkyBqwqklaitksG4i+7ctQgb/2m kes937K4RAzCJr+6WD6RYhlupx/vmKzufBv12A2o3euaRvfN/buOebqk36KV42AEKGJFFca l9KWtgU5fug== X-QQ-SSF: 0000000000000090000000000000000 X-HAS-ATTACH: no X-QQ-BUSINESS-ORIGIN: 2 In-Reply-To: <874mtvhegh.fsf@codesourcery.com> References: <874mtvhegh.fsf@codesourcery.com> X-QQ-STYLE: X-QQ-mid: webmail54t1416380922t8606695 From: "=?gb18030?B?TmFuIFhpYW8=?=" To: "=?gb18030?B?WWFvIFFp?=" Cc: "=?gb18030?B?Z2Ri?=" Subject: Re: How to use "frame addr" command in gdb? Mime-Version: 1.0 Content-Type: text/plain; charset="gb18030" Content-Transfer-Encoding: base64 Date: Wed, 19 Nov 2014 07:09:00 -0000 Message-ID: X-QQ-MIME: TCMime 1.0 by Tencent X-QQ-Mailer: QQMail 2.x X-QQ-ReplyHash: 1250729612 X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 X-IsSubscribed: yes X-SW-Source: 2014-11/txt/msg00027.txt.bz2 SGkgWWFvLAoKICAgIEdvdCBpdCEgVGhhbmtzIHZlcnkgbXVjaCBmb3IgeW91 ciBjbGFyaWZ5aW5nIG9mIGl0IQoKQmVzdCBSZWdhcmRzCk5hbiBYaWFvCi0t LS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0tLS0tLS0K RnJvbTogICJZYW8gUWkiOzx5YW9AY29kZXNvdXJjZXJ5LmNvbT47CkRhdGU6 ICBXZWQsIE5vdiAxOSwgMjAxNCAwMjo0OSBQTQpUbzogICJOYW4gWGlhbyI8 eGlhb25hbjE5ODMwODE4QHFxLmNvbT47CkNjOiAgImdkYiI8Z2RiQHNvdXJj ZXdhcmUub3JnPjsKU3ViamVjdDogIFJlOiBIb3cgdG8gdXNlICJmcmFtZSBh ZGRyIiBjb21tYW5kIGluIGdkYj8KCk5hbiBYaWFvIDx4aWFvbmFuMTk4MzA4 MThAcXEuY29tPiB3cml0ZXM6Cgo+IEkgdXNlIGdkYiB0byBkZWJ1ZyB0aGlz IHByb2dyYW0sIGFuZCBmaW5kICdmcmFtZSBuJyBjb21tYW5kIHdvcmtzIE9L Ogo+IChnZGIpIGJ0Cj4gIzAgIGZ1bmMxIChhPTEwKSBhdCBhLmM6NQo+ICMx ICAweDA4MDUwYjY3IGluIGZ1bmMyIChhPTEwKSBhdCBhLmM6MTEKPiAjMiAg MHgwODA1MGI4OSBpbiBmdW5jMyAoYT0xMCkgYXQgYS5jOjE4Cj4gIzMgIDB4 MDgwNTBiYjkgaW4gbWFpbiAoKSBhdCBhLmM6MjQKPiAoZ2RiKSBmcmFtZSAy Cj4gIzIgIDB4MDgwNTBiODkgaW4gZnVuYzMgKGE9MTApIGF0IGEuYzoxOAo+ Cj4gQnV0IHdoZW4gSSB3YW50IHRvIHVzZSAiZnJhbWUgYWRkciIgY29tbWFu ZCwgaXQgc2VlbXMgbm90IHdvcmsgd2VsbDoKPgo+IChnZGIpIGZyYW1lIDB4 MDgwNTBiYjkKPiAjMCAgMHgwMDAwMDAwMCBpbiA/PyAoKQo+IChnZGIpIGZy YW1lIDB4MDgwNTBiODkKPiAjMCAgMHgwMDAwMDAwMCBpbiA/PyAoKQo+IChn ZGIpIGZyYW1lIDB4MDgwNTBiOTIKPiAjMCAgMHgwMDAwMDAwMCBpbiA/PyAo KQo+Cj4gSG93IHRvIHVzZSAiZnJhbWUgYWRkciIgY29tbWFuZD8gVGhhbmtz IHZlcnkgbXVjaCBpbiBhZHZhbmNlISBJIGNhbid0Cj4gZmluZCBvdGhlciBy ZWZlcmVuY2UgZXhjZXB0IHRoZSBtYW51YWwuCgpZb3UgcGFzcyB0aGUgd3Jv bmcgYWRkcmVzcyB0byBjb21tYW5kICJmcmFtZSIuICBUaGUgYWRkcmVzc2Vz IGluIHRoZQpvdXRwdXQgb2YgImJ0IiBjb21tYW5kIGFyZSB0aGUgcGMgdmFs dWVzIGluIGVhY2ggZnJhbWUuICBUaGV5IGFyZSBub3QKdGhlIGFkZHJlc3Mg b2YgZnJhbWVzLgoKKGdkYikgaGVscCBmcmFtZQpTZWxlY3QgYW5kIHByaW50 IGEgc3RhY2sgZnJhbWUuCldpdGggbm8gYXJndW1lbnQsIHByaW50IHRoZSBz ZWxlY3RlZCBzdGFjayBmcmFtZS4gIChTZWUgYWxzbyAiaW5mbyBmcmFtZSIp LgpBbiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGZyYW1lIHRvIHNlbGVjdC4K SXQgY2FuIGJlIGEgc3RhY2sgZnJhbWUgbnVtYmVyIG9yIHRoZSBhZGRyZXNz IG9mIHRoZSBmcmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpXaXRoIGFyZ3VtZW50LCBu b3RoaW5nIGlzIHByaW50ZWQgaWYgaW5wdXQgaXMgY29taW5nIGZyb20KYSBj b21tYW5kIGZpbGUgb3IgYSB1c2VyLWRlZmluZWQgY29tbWFuZC4KCldlIHNo b3VsZCBwYXNzICJ0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUiIHRvIGNvbW1h bmQgImZyYW1lIiwgYW5kIGl0IGNhbgpiZSBnb3QgZnJvbSBjb21tYW5kICJp bmZvIGZyYW1lIi4KCihnZGIpIGJ0CiMwICBmdW5jMSAoYT0xMCkgYXQgMi5j OjYKIzEgIDB4MDgwNDg0NTIgaW4gZnVuYzIgKGE9MTApIGF0IDIuYzoxMgoj MiAgMHgwODA0ODQ3NCBpbiBmdW5jMyAoYT0xMCkgYXQgMi5jOjE5CiMzICAw eDA4MDQ4NDkzIGluIG1haW4gKCkgYXQgMi5jOjI1CihnZGIpIGluZm8gZnJh bWUgMgpTdGFjayBmcmFtZSBhdCAweGJmZmZlZTcwOgogICAgICAgICAgICAg ICBeXl5eXl5eXl5eIHRoZSBhZGRyZXNzIG9mIHRoZSBmcmFtZQogZWlwID0g MHg4MDQ4NDc0IGluIGZ1bmMzICgyLmM6MTkpOyBzYXZlZCBlaXAgPSAweDgw NDg0OTMKIGNhbGxlZCBieSBmcmFtZSBhdCAweGJmZmZlZTkwLCBjYWxsZXIg b2YgZnJhbWUgYXQgMHhiZmZmZWU1NAogc291cmNlIGxhbmd1YWdlIGMuCiBB cmdsaXN0IGF0IDB4YmZmZmVlNjgsIGFyZ3M6IGE9MTAKIExvY2FscyBhdCAw eGJmZmZlZTY4LCBQcmV2aW91cyBmcmFtZSdzIHNwIGlzIDB4YmZmZmVlNzAK IFNhdmVkIHJlZ2lzdGVyczoKICBlYnAgYXQgMHhiZmZmZWU2OCwgZWlwIGF0 IDB4YmZmZmVlNmMKCihnZGIpIGZyYW1lIDB4YmZmZmVlNzAKIzIgIDB4MDgw NDg0NzQgaW4gZnVuYzMgKGE9MTApIGF0IDIuYzoxOQoxOSAgICAgICAgICAg ICAgYyA9IDIgKiBmdW5jMihhKTsKCi0tIApZYW8gKMbr0qIp >From gdb-return-43918-listarch-gdb=sources.redhat.com@sourceware.org Wed Nov 19 09:48:54 2014 Return-Path: Delivered-To: listarch-gdb@sources.redhat.com Received: (qmail 7359 invoked by alias); 19 Nov 2014 09:48:53 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Delivered-To: mailing list gdb@sourceware.org Received: (qmail 7340 invoked by uid 89); 19 Nov 2014 09:48:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 19 Nov 2014 09:48:49 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sAJ9mCij016799 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 19 Nov 2014 04:48:13 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id sAJ9mACv032732; Wed, 19 Nov 2014 04:48:11 -0500 Message-ID: <546C675A.2080207@redhat.com> Date: Wed, 19 Nov 2014 09:48:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.1 MIME-Version: 1.0 To: Yao Qi , Nan Xiao CC: gdb Subject: Re: How to use "frame addr" command in gdb? References: <874mtvhegh.fsf@codesourcery.com> In-Reply-To: <874mtvhegh.fsf@codesourcery.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2014-11/txt/msg00028.txt.bz2 Content-length: 3492 BTW, I think I've argued before that "frame NUMBER" shouldn't fallback to creating a frame chain starting at NUMBER if no frame number NUMBER, nor a frame at adderss NUMBER is found in the frame chain. If I haven't, I'll do that now. :-) That's highly misleading, because the user is more likely to be trying to select a frame by number, like: (top-gdb) bt #0 gdb_main (args=0x7fffffffd810) at src/gdb/main.c:1157 #1 0x00000000004638e7 in main (argc=1, argv=0x7fffffffd918) at src/gdb/gdb.c:32 (top-gdb) frame 0 #0 gdb_main (args=0x7fffffffd810) at src/gdb/main.c:1157 1157 catch_errors (captured_main, args, "", RETURN_MASK_ALL); (top-gdb) frame 1 #1 0x00000000004638e7 in main (argc=1, argv=0x7fffffffd918) at src/gdb/gdb.c:32 32 return gdb_main (&args); (top-gdb) frame 2 #0 0x0000000000000000 in ?? () (top-gdb) For the "frame 2" above, I'd much rather that gdb complained with "no frame number 2". For the OP's case, I'd rather that gdb complained with "no frame at ADDR". For the use case of actually telling GDB to inspect a frame at some address not on the unwound frame chain, the user would need to ask that from GDB explicitly. That would mean we'd have something like: (gdb) frame number NUM (gdb) frame NUM (alias for "frame number") (gdb) frame address ADDR (gdb) frame create ADDR / frame address -create ADDR Thanks, Pedro Alves On 11/19/2014 06:49 AM, Yao Qi wrote: > Nan Xiao writes: > >> I use gdb to debug this program, and find 'frame n' command works OK: >> (gdb) bt >> #0 func1 (a=10) at a.c:5 >> #1 0x08050b67 in func2 (a=10) at a.c:11 >> #2 0x08050b89 in func3 (a=10) at a.c:18 >> #3 0x08050bb9 in main () at a.c:24 >> (gdb) frame 2 >> #2 0x08050b89 in func3 (a=10) at a.c:18 >> >> But when I want to use "frame addr" command, it seems not work well: >> >> (gdb) frame 0x08050bb9 >> #0 0x00000000 in ?? () >> (gdb) frame 0x08050b89 >> #0 0x00000000 in ?? () >> (gdb) frame 0x08050b92 >> #0 0x00000000 in ?? () >> >> How to use "frame addr" command? Thanks very much in advance! I can't >> find other reference except the manual. > > You pass the wrong address to command "frame". The addresses in the > output of "bt" command are the pc values in each frame. They are not > the address of frames. > > (gdb) help frame > Select and print a stack frame. > With no argument, print the selected stack frame. (See also "info frame"). > An argument specifies the frame to select. > It can be a stack frame number or the address of the frame. > ^^^^^^^^^^^^^^^^^^^^^^^^ > With argument, nothing is printed if input is coming from > a command file or a user-defined command. > > We should pass "the address of the frame" to command "frame", and it can > be got from command "info frame". > > (gdb) bt > #0 func1 (a=10) at 2.c:6 > #1 0x08048452 in func2 (a=10) at 2.c:12 > #2 0x08048474 in func3 (a=10) at 2.c:19 > #3 0x08048493 in main () at 2.c:25 > (gdb) info frame 2 > Stack frame at 0xbfffee70: > ^^^^^^^^^^ the address of the frame > eip = 0x8048474 in func3 (2.c:19); saved eip = 0x8048493 > called by frame at 0xbfffee90, caller of frame at 0xbfffee54 > source language c. > Arglist at 0xbfffee68, args: a=10 > Locals at 0xbfffee68, Previous frame's sp is 0xbfffee70 > Saved registers: > ebp at 0xbfffee68, eip at 0xbfffee6c > > (gdb) frame 0xbfffee70 > #2 0x08048474 in func3 (a=10) at 2.c:19 > 19 c = 2 * func2(a); >