From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30947 invoked by alias); 4 Apr 2011 13:35:01 -0000 Received: (qmail 30830 invoked by uid 22791); 4 Apr 2011 13:35:00 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,TW_FD,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 04 Apr 2011 13:34:20 +0000 Received: by vws4 with SMTP id 4so5332109vws.0 for ; Mon, 04 Apr 2011 06:34:19 -0700 (PDT) Received: by 10.220.194.1 with SMTP id dw1mr1938133vcb.62.1301924059085; Mon, 04 Apr 2011 06:34:19 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.200.3 with HTTP; Mon, 4 Apr 2011 06:33:59 -0700 (PDT) In-Reply-To: References: <20110331084729.GA29683@host1.jankratochvil.net> <20110331121617.GA32739@host1.jankratochvil.net> From: Kevin Pouget Date: Mon, 04 Apr 2011 13:35:00 -0000 Message-ID: Subject: Re: GDB and LD_PRELOAD library-call interception To: gdb@sourceware.org Content-Type: multipart/mixed; boundary=90e6ba4fc11210fd3604a017d1c4 X-IsSubscribed: yes 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 X-SW-Source: 2011-04/txt/msg00010.txt.bz2 --90e6ba4fc11210fd3604a017d1c4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2395 Here is a *prototype* patch of what I discussed earlier, which allows to follow the N-th fork of a wrapper. (my) `xterm' first forks /usr/libexec/utempter/utempter before starting the program to debug, so it's skipped, then GDB follows the forked child instead of the parent (I still need to figure out how not to create a new inferior in this case). C-c in the xterm is not intercepted by GDB, I don't know if that's a bug or a feature; however C-c in GDB terminal kills the xterm instead of stopping the debuggee ... I guess it's a matter of terminal ownership, the signal is just not sent to the right process (that's the opposite of Xavier's problem :) let me know what you think about it, I'll fix the bugs if it is seem interesting for the community Kevin On Sun, Apr 3, 2011 at 12:54 PM, Xavier de Gaye wrote: > > On Thu, Mar 31, 2011 at 2:16 PM, Jan Kratochvil wrote: > > > > It is not such straightforward, GDB expects the PID it has spawned will= be > > debugged while with xterm the process being debugged is its child. > > > > I guess you can write a small C helper which will: > > =A0* create new pty > > =A0* change its fds 0/1/2 to the slave of this pty > > =A0* fork xterm -e own-helper-part pty-unique-id > > In own-helper-part interconnect the pty master part and its fds 0/1/2. > > > > > The attached files 'xterm_wrapper.py' and 'interconnect_pty.py' are a > raw implementation written in python of the above scheme. In gdb do: > > =A0 =A0set exec-wrapper python xterm_wrapper.py > > The problem with the implementation is that the debuggee cannot set > the slave pty as its controlling terminal without forking (set > SET_CONTROLLING_TERMINAL to True in 'xterm_wrapper.py' in order to do > that, but then exec-wrapper cannot be used). So that it is not > possible to interrupt the debuggee with a 'C-c' character. > > On the other hand the 'interconnect_pty.py' helper used by > 'xterm_wrapper.py' can also be used by itself in stand-alone. When run > without arguments, it creates a pty and prints the slave pty name so > that it can be used in gdb with: > > =A0 =A0set inferior-tty /dev/pts/nn > > It can also be made to spawn gdb in a new xterm and set correctly the > '-tty' gdb option with tne new pty name (kind of the reverse of the > initial scheme): > > =A0 =A0python interconnect_pty.py --exec gdb --args '/path/to/debuggee' > > Xavier --90e6ba4fc11210fd3604a017d1c4 Content-Type: application/octet-stream; name="gdb-xterm.diff" Content-Disposition: attachment; filename="gdb-xterm.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gm3swmy61 Content-length: 3726 ZGlmZiAtLWdpdCBhL2dkYi9mb3JrLWNoaWxkLmMgYi9nZGIvZm9yay1jaGls ZC5jCmluZGV4IGJiMTczZTcuLjk5NzFjODMgMTAwNjQ0Ci0tLSBhL2dkYi9m b3JrLWNoaWxkLmMKKysrIGIvZ2RiL2ZvcmstY2hpbGQuYwpAQCAtMzQsNyAr MzQsNyBAQAogI2luY2x1ZGUgImNvbW1hbmQuaCIgLyogZm9yIGRvbnRfcmVw ZWF0ICgpICovCiAjaW5jbHVkZSAiZ2RiY21kLmgiCiAjaW5jbHVkZSAic29s aWIuaCIKLQorI2luY2x1ZGUgImxpbnV4LW5hdC5oIgogI2luY2x1ZGUgPHNp Z25hbC5oPgogCiAvKiBUaGlzIGp1c3QgZ2V0cyB1c2VkIGFzIGEgZGVmYXVs dCBpZiB3ZSBjYW4ndCBmaW5kIFNIRUxMLiAgKi8KQEAgLTQyMSwxMSArNDIx LDIwIEBAIGZvcmtfaW5mZXJpb3IgKGNoYXIgKmV4ZWNfZmlsZV9hcmcsIGNo YXIgKmFsbGFyZ3MsIGNoYXIgKiplbnYsCiAgIHJldHVybiBwaWQ7CiB9CiAK Ky8qIEZvbGxvdyB0aGUgTkZPUkstdGggY2hpbGQuICAqLworI2RlZmluZSBO Rk9SSyAyCitzdGF0aWMgaW50IAorSV93YW50X2ZvbGxvd19mb3JrX2NoaWxk KCkgeworICBzdGF0aWMgaW50IGZvcmsgPSAwIDsKKyAgcmV0dXJuICgrK2Zv cmsgJSAoTkZPUkspKSA9PSAwIDsKK30KKwogLyogQWNjZXB0IE5UUkFQUyB0 cmFwcyBmcm9tIHRoZSBpbmZlcmlvci4gICovCiAKIHZvaWQKIHN0YXJ0dXBf aW5mZXJpb3IgKGludCBudHJhcHMpCiB7CisgIGludCBlbmFibGVkID0gMCA7 CiAgIGludCBwZW5kaW5nX2V4ZWNzID0gbnRyYXBzOwogICBpbnQgdGVybWlu YWxfaW5pdHRlZCA9IDA7CiAgIHB0aWRfdCByZXN1bWVfcHRpZDsKQEAgLTQ1 MSwxNiArNDYwLDM3IEBAIHN0YXJ0dXBfaW5mZXJpb3IgKGludCBudHJhcHMp CiAgICAgICBtZW1zZXQgKCZ3cywgMCwgc2l6ZW9mICh3cykpOwogICAgICAg ZXZlbnRfcHRpZCA9IHRhcmdldF93YWl0IChyZXN1bWVfcHRpZCwgJndzLCAw KTsKIAorICAgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxpbnV4X2Vu YWJsZV9ldmVudF9yZXBvcnRpbmcgKGluZmVyaW9yX3B0aWQpOworICAgICAg ICBlbmFibGVkID0gMSA7CisgICAgICB9CisgICAgICAKICAgICAgIGlmICh3 cy5raW5kID09IFRBUkdFVF9XQUlUS0lORF9JR05PUkUpCiAJLyogVGhlIGlu ZmVyaW9yIGRpZG4ndCByZWFsbHkgc3RvcCwga2VlcCB3YWl0aW5nLiAgKi8K IAljb250aW51ZTsKIAogICAgICAgc3dpdGNoICh3cy5raW5kKQogCXsKKyAg ICAgICAgICBjYXNlIFRBUkdFVF9XQUlUS0lORF9GT1JLRUQ6CisgICAgICAg ICAgY2FzZSBUQVJHRVRfV0FJVEtJTkRfVkZPUktFRDogeworICAgICAgICAg ICAgaW50IGZvbGxvd190aGVfY2hpbGQgPSBJX3dhbnRfZm9sbG93X2Zvcmtf Y2hpbGQoKSA7CisgICAgICAgICAgICBpbnQgb2xkX2RldGFjaF9mb3JrID0g ZGV0YWNoX2ZvcmsgOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBG b3JjZSBHREIgdG8gZGV0YWNoIHRoZSBmb3Jrcy4gKi8KKyAgICAgICAgICAg IGRldGFjaF9mb3JrID0gMSA7CisgICAgICAgICAgICBpbmZlcmlvcl90aHJl YWQgKCktPnBlbmRpbmdfZm9sbG93ID0gd3MgOworICAgICAgICAgICAgCisg ICAgICAgICAgICBpZiAodGFyZ2V0X2ZvbGxvd19mb3JrKGZvbGxvd190aGVf Y2hpbGQpICE9IDApIHsKKyAgICAgICAgICAgICAgIHdhcm5pbmcoImNvdWxk bid0IGZvbGxvdyBmb3JrIGNoaWxkIikgOworICAgICAgICAgICAgfSBlbHNl IGlmIChmb2xsb3dfdGhlX2NoaWxkKSB7CisgICAgICAgICAgICAgIC8qIFJl c3VtZSB0aGUgbmV3IGNoaWxkIFBJRC4gKi8KKyAgICAgICAgICAgICAgcmVz dW1lX3B0aWQgPSBpbmZlcmlvcl9wdGlkIDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGRldGFjaF9mb3JrID0gb2xkX2RldGFjaF9mb3JrIDsKKyAg ICAgICAgICAgIGJyZWFrIDsKKyAgICAgICAgICB9CiAJICBjYXNlIFRBUkdF VF9XQUlUS0lORF9TUFVSSU9VUzoKIAkgIGNhc2UgVEFSR0VUX1dBSVRLSU5E X0xPQURFRDoKLQkgIGNhc2UgVEFSR0VUX1dBSVRLSU5EX0ZPUktFRDoKLQkg IGNhc2UgVEFSR0VUX1dBSVRLSU5EX1ZGT1JLRUQ6CiAJICBjYXNlIFRBUkdF VF9XQUlUS0lORF9TWVNDQUxMX0VOVFJZOgogCSAgY2FzZSBUQVJHRVRfV0FJ VEtJTkRfU1lTQ0FMTF9SRVRVUk46CiAJICAgIC8qIElnbm9yZSBncmFjZWZ1 bGx5IGR1cmluZyBzdGFydHVwIG9mIHRoZSBpbmZlcmlvci4gICovCmRpZmYg LS1naXQgYS9nZGIvbGludXgtZm9yay5jIGIvZ2RiL2xpbnV4LWZvcmsuYwpp bmRleCA3ZjY1NGFmLi4zZWRkZWE0IDEwMDY0NAotLS0gYS9nZGIvbGludXgt Zm9yay5jCisrKyBiL2dkYi9saW51eC1mb3JrLmMKQEAgLTYyOCw2ICs2Mjgs MTEgQEAgY2hlY2twb2ludF9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJv bV90dHkpCiAgIHBpZF90IHJldHBpZDsKICAgc3RydWN0IGNsZWFudXAgKm9s ZF9jaGFpbjsKIAorICAvKiBFbnN1cmUgdGhhdCB0aGUgaW5mZXJpb3IgaXMg bm90IG11bHRpdGhyZWFkZWQuICovCisgIHVwZGF0ZV90aHJlYWRfbGlzdCAo KSA7CisgIGlmICh0aHJlYWRfY291bnQgKCkgPiAxKQorICAgIGVycm9yKF8o ImNoZWNrcG9pbnQ6IGNhbid0IGNoZWNrcG9pbnQgbXVsdGlwbGUgdGhyZWFk cy4iKSkgOworICAKICAgLyogTWFrZSB0aGUgaW5mZXJpb3IgZm9yaywgcmVj b3JkIGl0cyAoYW5kIGdkYidzKSBzdGF0ZS4gICovCiAKICAgaWYgKGxvb2t1 cF9taW5pbWFsX3N5bWJvbCAoImZvcmsiLCBOVUxMLCBOVUxMKSAhPSBOVUxM KQo= --90e6ba4fc11210fd3604a017d1c4--