From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24808 invoked by alias); 27 Aug 2007 18:30:01 -0000 Received: (qmail 24604 invoked by uid 22791); 27 Aug 2007 18:29:57 -0000 X-Spam-Check-By: sourceware.org Received: from mail.baymicrosystems.com (HELO mail.baymicrosystems.com) (65.174.40.133) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 27 Aug 2007 18:29:53 +0000 Received: from [192.168.1.201] (ssl-pc.baymicrosystems.com [192.168.1.201]) (authenticated bits=0) by mail.baymicrosystems.com (8.13.5/8.13.5) with ESMTP id l7RIQsPL032288; Mon, 27 Aug 2007 11:26:54 -0700 Message-ID: <46D31638.5030200@baymicrosystems.com> Date: Mon, 27 Aug 2007 18:30:00 -0000 From: Sheng-Liang Song User-Agent: Thunderbird 1.5.0.12 (Windows/20070509) MIME-Version: 1.0 To: Eli Zaretskii , gdb@sourceware.org CC: jan.kratochvil@redhat.com, koling@kchang.net Subject: Re: reference environment variables from gdb scripts (gdb and unix pipe) References: <12302351.post@talk.nabble.com> <20070824085740.GA11291@host0.dyn.jankratochvil.net> <46CF0945.8090901@baymicrosystems.com> <46CF22CA.6090708@baymicrosystems.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: 2007-08/txt/msg00223.txt.bz2 Hi, Thanks for the info. gdb has "shell" command to switch to a unix shell. After switch to a unix shell, can I call gdb functions/commands? Does gdb supports "pipe" command? Is there a plan to add a "unix pipe" command to gdb debug prompt? (gdb) p $2 $3 = { >> = { _M_impl = {> = {<__gnu_cxx::new_allocator> = {}, }, _M_start = 0x502010, _M_finish = 0x50201c, _M_end_of_storage = 0x50201c}}, } (gdb) p$2 | my_unix_program_to_do_some_data_processing ( a pipe, "|", would be nice to have!) (gdb) if ($?) check the returns end (gdb) shell % gdb p $2 //I lost the control to the gdb environment. (gdb) !my_sell_program_take_a_argument $2 (It would be nice if I can use "!" to execute my shell program.) Thanks, Sheng-Liang Eli Zaretskii wrote: >> Date: Fri, 24 Aug 2007 11:26:18 -0700 >> From: Sheng-Liang Song >> CC: jan.kratochvil@redhat.com, koling@kchang.net >> >> Eli Zaretskii wrote: >> >>> The GDB scripting commands are documented in the GDB user manual. See >>> the node "Sequences". >>> >>> >> I am looking for a more detail document. >> > > There isn't one, because I believe everything is described in the user > manual. If you find something that isn't there, please tell. > > >> What is the different between "." and "->" operator in gdb script? >> (Looks like no difference to me. works the same.) >> >> What operators does gdb 6.6 support? >> > > This is not specific to scripts. GDB uses operators from the source > language, with C/C++ operators being supported more thoroughly than > those of other languages. See the node "C Operators" in the manual > for C/C++, and similar nodes for other languages in language-specific > sections under the node "Supported Languages". > > In general, anything that is not described in the node "Sequences" and > its sub-nodes is not specific to scripting, but is just a feature of > normal GDB interaction with the user. > > >> Is a gdb script grammar like this one: >> http://www.nongnu.org/hcb/ >> > > There's no formal description of the script grammar, since the GDB > scripting is just a thin add-on to CLI, the command-line interpreter > built into GDB, and CLI is for human interactions, not for programs. > Humans don't need a formal grammar to interact with programs, only the > format of each command. > > >> $vec->_M_impl >> STL vector does not have the member var _M_impl. >> gdb) will report: There is no member or method named _M_impl. >> >> How do I check if $vec has the member _M_impl? >> > > I don't think you can, but I don't consider myself a GDB scripting > guru. Maybe someone else here will be able to help you. > > >> I would like to write a script like this: >> >> if isMember($vec,_M_impl) >> //do something >> else >> //do something else >> end >> > > One way of doing that would be to define within $vec a boolean member > that has the value TRUE only if _M_impl is a valid member, then you > can check for that boolean flag. Another way is to have a function > isMember inside the $vec class (or a global function in your program) > that would _return_ such a boolean, then you can use what you wrote > above almost verbatim, since GDB can call functions within the > debuggee. > > IOW, whatever you want to test must be already present as data in your > program, or else GDB scripting and CLI will not be able to use it in > the `if' clause. > > Admittedly, such a scripting is quite limited, which is why there're > plans to add an extension language (Python) to GDB. >