This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gdb -batch always exits with status 0


On 08/17/2018 05:03 PM, Gary Benson wrote:
> Ruslan Kabatsayev wrote:
>> On Fri, 17 Aug 2018 at 18:23, Gary Benson <gbenson@redhat.com> wrote:
>>>
>>> It would be the least impactful way, sure, but my point is that
>>> GDB doesn't operate in an intuitive way, and my view is that
>>> whatever is intuitive should be the default.  Having to request it
>>> with a special flag makes GDB harder for new users.
>>
>> Not sure about intuitiveness of early exit, but we have an example
>> of the converse: bash (and other shells). Namely, by default it
>> executes all the commands, exits with the exit status of the last
>> command executed. But you can `set -e`, and then first failing
>> command will stop processing. But then, there do exist means to
>> suppress failure (e.g. `badCommand && true`), which GDB doesn't seem
>> to have.
> 
> Shells are the only example I could think of.  And I wonder what
> proportion of shell scripts start with 'set -e' :)  Having to add
> that is the kind of thing I mean about making things harder for
> new users.

To me, it feels like you're not discussing the real issue.

GDB _does_ stop processing scripts on first error.

 $ cat file1 
 fail1
 fail2
 fail3
 $ cat file2 
 fail4
 fail5
 fail6
 $ gdb -q -x file1 -x file2
 file1:1: Error in sourced command file:
 Undefined command: "fail1".  Try "help".
 file2:1: Error in sourced command file:
 Undefined command: "fail4".  Try "help".                                                                                                                                    
 (gdb)   

Note, fail2, fail3, fail5 and fail6 were not run.

What GDB does not do is consider an error from inside a script
sourced from the shell command line as reason to fail out.  So for
example above, I think Gary is arguing that GDB should have behaved
like this:

 $ gdb -q -x file1 -x file2
 file1:1: Error in sourced command file:
 Undefined command: "fail1".  Try "help".
 (gdb)   

I.e., "file2" was not sourced.

In this aspect, "-ex" behaves exactly like "-x" -- you can think
of -ex as gdb internally pasting the -ex command in a script
and then sourcing it with -x.

Thanks,
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]