From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3023 invoked by alias); 16 Jul 2011 08:42:54 -0000 Received: (qmail 2999 invoked by uid 22791); 16 Jul 2011 08:42:52 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mail-ew0-f41.google.com (HELO mail-ew0-f41.google.com) (209.85.215.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 16 Jul 2011 08:42:36 +0000 Received: by ewy9 with SMTP id 9so1106894ewy.0 for ; Sat, 16 Jul 2011 01:42:35 -0700 (PDT) MIME-Version: 1.0 Received: by 10.213.13.136 with SMTP id c8mr1540946eba.17.1310805755083; Sat, 16 Jul 2011 01:42:35 -0700 (PDT) Received: by 10.213.22.195 with HTTP; Sat, 16 Jul 2011 01:42:35 -0700 (PDT) Date: Sat, 16 Jul 2011 10:09:00 -0000 Message-ID: Subject: [PATCH] gdb output pipelining to shell From: Abhijit Halder To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0015174c14da66bcc704a82bbf86 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-07/txt/msg00411.txt.bz2 --0015174c14da66bcc704a82bbf86 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1560 At present, there is no way to pass the output of a gdb command directly to the shell for further processing. For example, something similar is not permitted: (gdb) thread apply all bt | less This kind of feature is quite helpful in a scenario where a program under debugger has hundreds of threads running and one wants to examine the stack-trace of all the threads at once. The current behaviour of gdb makes it somewhat difficult since the entire output of gdb command (sometimes more than a number of pages) is dumped onto the screen. One can always redirect the output of gdb using logging mechanism, but that requires offline analysis of the log-file which may not be acceptable in certain situations. Another option is to get a shell using gdb's shell command, but that forces one every time to source the shell profile. Furthermore, the log-file contains entire debug information, parsing that huge file is resource and time consuming. I have implemented a feature which will allow one to pass the output of any gdb command to the shell for further processing. 2011-07-09 Abhijit Halder * top.c (execute_command_to_pipe): New function. (parse_for_shell_command): New function (execute_command): Update. * ui-file.c (gdb_modify_io): New function. * ui-file.h (gdb_modify_io): Prototype. top.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- ui-file.c | 15 ++++++++++++ ui-file.h | 3 ++ 3 files changed, 91 insertions(+), 1 deletion(-) Regards, Abhijit Halder --0015174c14da66bcc704a82bbf86 Content-Type: text/x-patch; charset=US-ASCII; name="gdb-shell-integration.patch" Content-Disposition: attachment; filename="gdb-shell-integration.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gq6brz2o0 Content-length: 4673 ZGlmZiAtcnVwIHNyYy8vZ2RiL3RvcC5jIGRzdC8vZ2RiL3RvcC5jCi0tLSBz cmMvL2dkYi90b3AuYwkyMDExLTA2LTI4IDAwOjUxOjUwLjAwMDAwMDAwMCAr MDUzMAorKysgZHN0Ly9nZGIvdG9wLmMJMjAxMS0wNy0xNSAxMzo0ODoxOS45 NDM5MTE5NzkgKzA1MzAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJl dmVudC1sb29wLmgiCiAjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCiAjaW5jbHVk ZSAicHl0aG9uL3B5dGhvbi5oIgorI2luY2x1ZGUgInVpLWZpbGUuaCIKIAog LyogcmVhZGxpbmUgaW5jbHVkZSBmaWxlcy4gICovCiAjaW5jbHVkZSAicmVh ZGxpbmUvcmVhZGxpbmUuaCIKQEAgLTM1OCw2ICszNTksNjggQEAgcHJlcGFy ZV9leGVjdXRlX2NvbW1hbmQgKHZvaWQpCiAgIHJldHVybiBjbGVhbnVwOwog fQogCitjaGFyICoKK3BhcnNlX2Zvcl9zaGVsbF9jb21tYW5kIChjaGFyICpw KQoreworICBjaGFyICpzaF9jbWQsICpjcG9zLCAqc3BvcywgKmVwb3M7Cisg IGludCBxdW90ZV9jbnQgPSAwOworCisgIGlmICgoc2hfY21kID0gc3RyY2hy IChwLCAnfCcpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIHNwb3MgPSBwOwor ICAgICAgZXBvcyA9IHAgKyBzdHJsZW4gKHApIC0gMTsKKworICAgICAgZm9y ICg7OykKKyAgICB7CisgICAgICBmb3IgKGNwb3MgPSBzcG9zOyAoY3BvcyA9 IG1lbWNociAoY3BvcywgJyInLCAoc2hfY21kLWNwb3MpKSkgIT0gTlVMTDsg Y3BvcysrKQorICAgICAgICBxdW90ZV9jbnQrKzsKKyAgICAgIHNwb3MgPSAo c2hfY21kICsgMSk7CisgICAgICBpZiAoKHF1b3RlX2NudCAlIDIpID09IDAg fHwgKHNoX2NtZCA9IHN0cmNociAoc3BvcywgJ3wnKSkgPT0gTlVMTCkKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHNoX2NtZCA9PSBOVUxM KQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjcG9zID0gc3BvczsKKyAg ICB3aGlsZSAoaXNzcGFjZSgqY3BvcykpCisgICAgICBjcG9zKys7CisKKyAg ICBpZiAoKmNwb3MgIT0gJ3snKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAg ICAqY3BvcyA9ICcgJzsKKworICAgIGNwb3MgPSBlcG9zOworICAgIHdoaWxl IChpc3NwYWNlKCpjcG9zKSkKKyAgICAgIGNwb3MtLTsKKworICAgIGlmICgq Y3BvcyAhPSAnfScpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgICpjcG9z ID0gJyAnOworICAgIH0KKworICBpZiAoc2hfY21kKQorICAgICpzaF9jbWQr KyA9ICdcMCc7CisKKyAgcmV0dXJuIHNoX2NtZDsKK30KKworLyogUnVuIGV4 ZWN1dGVfY29tbWFuZCBmb3IgUCBhbmQgRlJPTV9UVFkuIFdyaXRlIG91dHB1 dCBpbiBwaXBlLCAKKyAgIGRvIG5vdCBkaXNwbGF5IGl0IHRvIHRoZSBzY3Jl ZW4uICAqLworCit2b2lkCitleGVjdXRlX2NvbW1hbmRfdG9fcGlwZSAoY2hh ciAqcCwgaW50IGZyb21fdHR5LCBGSUxFICpwaXBlKQoreworICBGSUxFICpm aWxlOworCisgIGZpbGUgPSBnZGJfbW9kaWZ5X2lvIChnZGJfc3Rkb3V0LCBw aXBlKTsKKyAgZXhlY3V0ZV9jb21tYW5kIChwLCBmcm9tX3R0eSk7CisgIHBp cGUgPSBnZGJfbW9kaWZ5X2lvIChnZGJfc3Rkb3V0LCBmaWxlKTsKKyAgcGNs b3NlIChwaXBlKTsKK30KKwogLyogRXhlY3V0ZSB0aGUgbGluZSBQIGFzIGEg Y29tbWFuZCwgaW4gdGhlIGN1cnJlbnQgdXNlciBjb250ZXh0LgogICAgUGFz cyBGUk9NX1RUWSBhcyBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGRlZmluaW5n IGZ1bmN0aW9uLiAgKi8KIApAQCAtMzY4LDcgKzQzMSwxNiBAQCBleGVjdXRl X2NvbW1hbmQgKGNoYXIgKnAsIGludCBmcm9tX3R0eSkKICAgc3RydWN0IGNt ZF9saXN0X2VsZW1lbnQgKmM7CiAgIGVudW0gbGFuZ3VhZ2UgZmxhbmc7CiAg IHN0YXRpYyBpbnQgd2FybmVkID0gMDsKLSAgY2hhciAqbGluZTsKKyAgY2hh ciAqbGluZSwgKnNoX2NtZDsKKworICBpZiAoKHNoX2NtZCA9IHBhcnNlX2Zv cl9zaGVsbF9jb21tYW5kIChwKSkgIT0gTlVMTCkgCisgICAgeworICAgICAg RklMRSAqcGlwZTsKKworICAgICAgcGlwZSA9IHBvcGVuIChzaF9jbWQsICJ3 Iik7CisgICAgICBleGVjdXRlX2NvbW1hbmRfdG9fcGlwZSAocCwgZnJvbV90 dHksIHBpcGUpOworICAgICAgcmV0dXJuOworICAgIH0KIAogICBjbGVhbnVw ID0gcHJlcGFyZV9leGVjdXRlX2NvbW1hbmQgKCk7CiAKZGlmZiAtcnVwIHNy Yy8vZ2RiL3VpLWZpbGUuYyBkc3QvL2dkYi91aS1maWxlLmMKLS0tIHNyYy8v Z2RiL3VpLWZpbGUuYwkyMDExLTA1LTE0IDExOjE0OjM2LjAwMDAwMDAwMCAr MDUzMAorKysgZHN0Ly9nZGIvdWktZmlsZS5jCTIwMTEtMDctMTUgMTM6NDk6 MzQuOTk5OTEwMzMyICswNTMwCkBAIC02MTcsNiArNjE3LDIxIEBAIHN0cnVj dCB1aV9maWxlICoKIHN0ZGlvX2ZpbGVvcGVuIChGSUxFICpmaWxlKQogewog ICByZXR1cm4gc3RkaW9fZmlsZV9uZXcgKGZpbGUsIDApOworCit9CisKK0ZJ TEUgKgorZ2RiX21vZGlmeV9pbyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIEZJ TEUgKmlvc3RyZWFtX25ldykKK3sKKyAgRklMRSAqaW9zdHJlYW1fb2xkOwor ICBzdHJ1Y3Qgc3RkaW9fZmlsZSAqc3RkaW8gPSB1aV9maWxlX2RhdGEgKGZp bGUpOworCisgIGlmIChzdGRpby0+bWFnaWMgIT0gJnN0ZGlvX2ZpbGVfbWFn aWMpCisgICAgaW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywK KwkJICAgIF8oImdkYl9tb2RpZnlfaW86IGJhZCBtYWdpYyBudW1iZXIiKSk7 CisgIGlvc3RyZWFtX29sZCA9IHN0ZGlvLT5maWxlOworICBzdGRpby0+Zmls ZSA9IGlvc3RyZWFtX25ldzsKKyAgcmV0dXJuIGlvc3RyZWFtX29sZDsKIH0K IAogc3RydWN0IHVpX2ZpbGUgKgpkaWZmIC1ydXAgc3JjLy9nZGIvdWktZmls ZS5oIGRzdC8vZ2RiL3VpLWZpbGUuaAotLS0gc3JjLy9nZGIvdWktZmlsZS5o CTIwMTEtMDUtMTMgMjI6NTg6MjAuMDAwMDAwMDAwICswNTMwCisrKyBkc3Qv L2dkYi91aS1maWxlLmgJMjAxMS0wNy0xNSAxMzo0ODo1NC42MDM5MTIxOTkg KzA1MzAKQEAgLTEyNiw2ICsxMjYsOSBAQCBleHRlcm4gc3RydWN0IHVpX2Zp bGUgKnN0ZGlvX2ZpbGVvcGVuIChGCiAvKiBPcGVuIE5BTUUgcmV0dXJuaW5n IGFuIFNURElPIGJhc2VkIFVJX0ZJTEUuICAqLwogZXh0ZXJuIHN0cnVjdCB1 aV9maWxlICpnZGJfZm9wZW4gKGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUpOwog CisvKiBNb2RpZnkgdGhlIGZpbGUgcG9pbnRlciBvZiBhbiBTVERJTyBiYXNl ZCBVSV9GSUxFLiAqLworRklMRSAqZ2RiX21vZGlmeV9pbyAoc3RydWN0IHVp X2ZpbGUgKmZpbGUsIEZJTEUgKmlvc3RyZWFtX25ldyk7CisKIC8qIENyZWF0 ZSBhIGZpbGUgd2hpY2ggd3JpdGVzIHRvIGJvdGggT05FIGFuZCBUV08uICBD TE9TRV9PTkUKICAgIGFuZCBDTE9TRV9UV08gaW5kaWNhdGUgd2hldGhlciB0 aGUgb3JpZ2luYWwgZmlsZXMgc2hvdWxkIGJlCiAgICBjbG9zZWQgd2hlbiB0 aGUgbmV3IGZpbGUgaXMgY2xvc2VkLiAgKi8K --0015174c14da66bcc704a82bbf86--