Bug 15802 - (gdb) start will run entire program if there is no "main" symbol
Summary: (gdb) start will run entire program if there is no "main" symbol
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: breakpoints (show other bugs)
Version: unknown
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-07-30 07:10 UTC by Ben Longbons
Modified: 2024-01-09 00:02 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ben Longbons 2013-07-30 07:10:05 UTC
(gdb) start    will try to run the entire program if it fails to set the breakpoint on main.

(Of course, arguably it's wrong to break specifically on main, since there may be static constructors that run earlier ...)

$ gdb /bin/true
GNU gdb (GDB) 7.6 (Debian 7.6-5)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Parsing .gdbinit
Reading symbols from /bin/true...(no debugging symbols found)...done.
(gdb) start
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n

Starting program: /bin/true 
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Inferior 1 (process 31851) exited normally]
(gdb) start
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y

Temporary breakpoint 1 (main) pending.
Starting program: /bin/true 
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?
[Inferior 1 (process 31855) exited normally]
Comment 1 Pedro Alves 2013-07-30 13:56:13 UTC
Thanks for filing this.  It's annoyed me before too.

> (Of course, arguably it's wrong to break specifically on main, since there 
> may be static constructors that run earlier ...)

That's how the command is defined:

 (gdb) help start
 Run the debugged program until the beginning of the main procedure.
 You may specify arguments to give to your program, just as with the
 "run" command.

I once hacked a patch to add a "create" command, that creates the inferior process, but leaves it held at the entry point.  This was like setting a break
at the entry point (b *_start; run), but easier, with no breakpoint at all:

 https://github.com/palves/gdb/commit/be1bc6c802bc5f07b648f45901120dae2278c330

Never got myself to gather enough strength to submit and face the potential bikeshed.  :-)
Comment 2 Hannes Domani 2024-01-08 16:52:42 UTC
Does the 'starti' command satisfy to resolve this ticket?
Comment 3 Tom Tromey 2024-01-09 00:02:50 UTC
(In reply to Hannes Domani from comment #2)
> Does the 'starti' command satisfy to resolve this ticket?

starti definitely addresses comment #1 but I wonder if
it would be better for 'start' to fail if no appropriate
'main' can be found. After all in this situation you
could get the same behavior form 'run'.