News for hackers. Stuff that matters.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by yen223 on Saturday August 12, 2017 @05:08AM (#14997165)
I used to think GDB was a tool with the most broken interface I've ever seen, and which requires arcane commands to do the most trivial of debugging things.

I still do, but I used to too.

That early dig against Windows was particularly funny. There's no way I would pick that over Visual Studio's debugging tools.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by userbinator on Saturday August 12, 2017 @11:54AM (#14998360)
I agree that gdb's syntax is ridiculous, having come from a background of DOS DEBUG and WinDbg, but what irritates me more are the implementations of certain functionality:

- No way to get a 16-column (bytes+ASCII) standard hexdump. This is functionality that even the most basic debugger should have, yet it's missing from gdb.

- "disassemble" command is next to useless.

- If you write "b 0x12345" intending to set a breakpoint at address 0x12345, it doesn't work. An unnecessary and nonsensical extra asterisk is needed (which makes it look like it's retrieving 4/8 bytes from 0x12345, and using that as the address of the breakpoint.)

- Starting gdb with a binary and passing arguments to it --- you'd expect it to be smart enough to realise that anything after the executable name should be the arguments to the debuggee and not the debugger, but it isnt.

I don't use gdb often, but when I do, it's usually the option of last resort.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by bennofs on Saturday August 12, 2017 @12:20PM (#14998479)
First of all, I agree! GDB without extensions is not that nice to use. But there exist several extensions (https://github.com/cyrus-and/gdb-dashboard, https://github.com/hugsy/gef, https://github.com/pwndbg/pwndbg, https://github.com/longld/peda, even though developed for it, these are not only useful for exploit dev!) that make it a lot better.

> - No way to get a 16-column (bytes+ASCII) standard hexdump. This is functionality that even the most basic debugger should have, yet it's missing from gdb.

This should be quite easy to implement as a small python snippet that you put in your ~/.gdbinit. Granted, this should be builtin functionality, but it also shows how extensible GDB can be.

> - If you write "b 0x12345" intending to set a breakpoint at address 0x12345, it doesn't work. An unnecessary and nonsensical extra asterisk is needed (which makes it look like it's retrieving 4/8 bytes from 0x12345, and using that as the address of the breakpoint.)

Agreed, I never understood why that was necessary. It is really annoying. Perhaps someone wanted to avoid a conflict if you had a symbol named "0x12345"? (can you even do that?)

> - Starting gdb with a binary and passing arguments to it --- you'd expect it to be smart enough to realise that anything after the executable name should be the arguments to the debuggee and not the debugger, but it isnt.

I recently learned that gdb has a neat option called --args, that does exactly this:

    gdb --args program arg1 arg2
GDB feels quite similar to VIM to me: you have to spent some time to get used to it, it has some warts but it is very flexible and useful if you know it.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by saaadhu on Saturday August 12, 2017 @12:57PM (#14998709)
"b 0x12345" will place a line breakpoint at line number 0x12345 of the current source file. The "nonsensical" extra asterisk is used to tell gdb that you want an address breakpoint instead.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by bennofs on Saturday August 12, 2017 @05:56PM (#15000230)
Oh! That makes sense, thank you. It only raises the question though, does anyone really use hexadecimal line numbers? :)
Re:Give me 15 minutes and I'll change your view of GDB (2015... by ithkuil on Sunday August 13, 2017 @04:14AM (#15002059)
Just a guess: if you have an expression language that lexes numbers in a few bases, then when parsing some commands you no longer know which base the number token was, all you know is that you got a number, and in case of the break command you interpret that as a line number unless prefixed with a * token
Re:Give me 15 minutes and I'll change your view of GDB (2015... by btschaegg on Sunday August 13, 2017 @06:07AM (#15002320)
That's about the same vibe I got from GDB so far. I don't use it all to often, so I'm certainly not that "effective" in it, but I still get my debugging done. And yes, it is a bit arcane.

However, on the topic of picking this over the VS debugger: The lack of arcane configuration, socket permissions and usage steps required to get it running on remote machines is what would make me pick it over VS nearly all the time. I haven't yet gotten to try the VS2017 one, but its predecessors were abysmal in that regard.

Tellingly, GDB's simplicity in that regard - which is the same as far as many other UNIXy tools go - comes from the approach of "if you have an SSH connection, you're good to go", which is something that is lacking in almost any Microsoft tool.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by slrz on Saturday August 12, 2017 @08:17PM (#15000813)
GDB is used in lots of places, often times called programmatically. You can't just change long-standing behaviour and get away with it. This is not a web framework.

So additional positional arguments on the gdb command line will always be interpreted as core files or PIDs instead of being passed through to the inferior program (unless using --args).

Similar things apply to other complaints.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by sigjuice on Saturday August 12, 2017 @03:12PM (#14999451)
You don't explain how "disassemble" is useless, but the rest of the things you mention are extremely superficial.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by fest on Saturday August 12, 2017 @08:55AM (#14997708)
I could agree with you on gdb's user interface. However, working on embedded hardware, plain gdb and it's architecture-specific forks|variants have been the least fiddly things to use.

The most recent examples I've stumbled upon were System Workbench for STM32 and Atollic Studio debugging relatively recent STM32F7 series. When the debugging from IDE doesn't work, it's very hard to see where the problem is (is the hardware interface service started? with the correct parameters? does it have access to hardware USB device? did it even succeed flashing the firmware?)

Re:Give me 15 minutes and I'll change your view of GDB (2015... by bramv on Saturday August 12, 2017 @03:36PM (#14999559)
I stopped using the integrated debugging from an IDE because of the problems you described. Segger Ozone is doing a good job if you like a graphic interface.

(BTW nice to see you here again. I think we met at some point playing with a laser cutter next to your old office in Riga).

Re:Give me 15 minutes and I'll change your view of GDB (2015... by fest on Saturday August 12, 2017 @04:21PM (#14999764)
I've accustomed myself to openocd, gdb and some small custom scripts (e.g. interpreting fault registers)

Hehe, the world really is that small :) Say hi to Mark if you meet him, I haven't seen him in ages.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by pjmlp on Saturday August 12, 2017 @05:39AM (#14997226)
GDB already felt like that when we had C++ Builder, Visual C++, Zortech C++ visual debuggers on mid-90's versions of Mac and Windows.

The only debuggers that could match them in usability and graphical debugging features were Motif based ones, being sold as a single product.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by exikyut on Sunday August 13, 2017 @06:48AM (#15002402)
From a historical-software/UI perspective, I'm curious what that Motif software looks like, and how, er, findable it is.

Studying old systems that have fallen by the wayside can often be instructive.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by pjmlp on Tuesday August 15, 2017 @01:58AM (#15015878)
Still found on Aix and HP-UX systems, which are the surviving ones. Solaris dropped it, and all other commercial big iron UNIXes are dead.

You can get some screenshots here

https://en.wikipedia.org/wiki/Common_Desktop_Environment

https://sourceforge.net/projects/cdesktopenv/

Re:Give me 15 minutes and I'll change your view of GDB (2015... by exikyut on Friday August 18, 2017 @09:30AM (#15045896)
Woops, didn't notice this till now. I wasn't referring to Motif itself, rather the debugger programs. Contemporary UIs are always interesting to study!

It's awesome that Motif and CDE are finally open source though.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by progman on Saturday August 12, 2017 @05:44AM (#14997232)
There are convenient graphical frontends for GDB. DDD for instance can create plots, diagrams, etc.

https://www.gnu.org/software/ddd/

Re:Give me 15 minutes and I'll change your view of GDB (2015... by 1001101 on Saturday August 12, 2017 @08:58AM (#14997716)
ConqueGDB in vim is my jam.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by pjmlp on Sunday August 13, 2017 @05:18AM (#15002206)
DDD was always for me the only sane way to use GDB. Until I got hold of it, I was mostly using it from Emacs.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by krona on Saturday August 12, 2017 @06:00AM (#14997273)
For what it's worth, VSCode and Visual Studio now have GDB integrations through its machine interface (MI). I use the VSCode one (part of the c/c++ extension) on a regular basis and while lacking functionality, it's very easy to use.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by pksadiq on Saturday August 12, 2017 @06:57AM (#14997412)
In GNU Emacs one can use gdb-many-windows in gdb debug mode to get the real power of gdb.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by bennofs on Saturday August 12, 2017 @10:21AM (#14997973)
Can you tell me some of the things that VS does much better? I've only ever used GDB, and I am kind of lost when trying to debug a binary on windows
Re:Give me 15 minutes and I'll change your view of GDB (2015... by jussij on Saturday August 12, 2017 @10:50AM (#14998059)
> I am kind of lost when trying to debug a binary on windows

When I want to debug a program using the Visual Studio IDE I do the following:

1. Start the IDE and open the solution file.

2. Make sure the Debug Build option is selected.

3. Open a given file in the solution that I want to debug.

4. Select a line in that file and use the Debug, Toggle Breakpoint menu to set a breakpoint.

5. Run the debugger using the Debug, Start Debugging menu and wait for the breakpoint to be hit.

6. When that break point is hit just use the debugger to examine the state of the program.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by corndoge on Saturday August 12, 2017 @11:28AM (#14998207)
While a simple series of steps it's still pretty complex compares to the equivalent in gdb:

  $ gdb ./binary
  (gdb) break file.c:line
  (gdb) run
I think this is merely a disguised version of the "CLIs are too hard" argument...
Re:Give me 15 minutes and I'll change your view of GDB (2015... by ksk on Sunday August 13, 2017 @03:12AM (#15001884)
Calling it "CLIs are hard" is trivializing it but anyway, it depends on what your common case is. For C/C++, CLIs slow me down tremendously. In an IDE, You don't need to type a single command to view program state (automatic + local + thread storage), call stacks, memory usage, CPU Usage, Heap activity, unpacked C++ containers, GPU state, etc. But this is not even that impressive TBH. FME Windows in general is better at debug symbol management than Linux especially when it comes to shipped binaries. The post[0] sums it up nicely:

"I can take a crash dump file from a customer running an arbitrary version of our games, running on an arbitrary version of Windows, load it into the debugger and have all of the symbols automatically show up. I don’t need to know or care what version of the game or what service pack of Windows the customer was running, and I don’t need to think about package names or new repositories. The symbols and binaries Just. Show. Up."

[0]https://randomascii.wordpress.com/2013/02/20/symbols-on-linu...

Re:Give me 15 minutes and I'll change your view of GDB (2015... by bennofs on Sunday August 13, 2017 @04:58AM (#15002156)
The symbol thing sounds useful and is something I cannot comment on, since most often I either debug open source programs that I run myself (so I have the binary with compiled with debug symbols) or there is no source at all for the binary (and so no symbols). But, most of the other things you listed are, IMO, quite easy with GDB:

> view program state

in my experience, your often only interested in a few variables. then, you just run

    display var
once for each variable and GDB will show the value of var on every break. There is also `info locals` to show a local variables, and I am pretty sure that you can set it up to run on every break with some simple config (there's probably an extension pack that does it)

> call stacks

almost every enhancement plugin for GDB in python that I know of does this (GEF, voltron, ...)

> unpacked C++ containers

I am pretty sure GDB pretty-prints C++ containers?

This isn't to defend GDB, it cannot do Heap activity or CPU usage or GPU state out of the box and sometimes, a visual interface is nicer. I just wanted to comment on what is possible with GDB, because I was often not aware of that either.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by ksk on Sunday August 13, 2017 @10:29AM (#15003035)
>This isn't to defend GDB, it cannot do Heap activity or CPU usage or GPU state out of the box and sometimes, a visual interface is nicer. I just wanted to comment on what is possible with GDB, because I was often not aware of that either.

Surely then, the difference between whats possible, and whats easy/default out of the box isn't simply "CLIs are hard" ! :)

Anyway it seems like we'd agree on most things, so nothing really left to discuss.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by akovaski on Saturday August 12, 2017 @01:53PM (#14998975)
However, it is a lot more intuitive compared to gdb: Click the green arrow. Click the line you want to set a breakpoint on. See where you stopped in the same editor that you wrote the code in. Hover your mouse over variables to see their values, visually explore class and array variables. Dig down into functions that are about to be called, before you actually call them.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by xixor2 on Saturday August 12, 2017 @07:56PM (#15000737)
> While a simple series of steps it's still pretty complex compares to the equivalent in gdb:

Oh come on. If you're developing with visual studio, you've already got it open and have been compiling with it.

Debugging in VS is literally click the mouse where you want to stop, F5, full call stack/local variables there in front of you.

Given the list above, if you reproduce a similar list for gdb it is also pretty tedious: run a terminal emulator, spawn a new shell, cd to the directory you want to work in, compile the program with gcc with the appropriate flags, run gdb with the appropriate arguments.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by criddell on Saturday August 12, 2017 @01:42PM (#14998921)
Visual Studio has a command window that you can use if you want to type commands rather than use the GUI. Plus, the person you replied to was being very descriptive. Just as you start gdb and pass the binary name as a parameter, you can do the same in Windows by double clicking on the solution file.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by cma on Saturday August 12, 2017 @02:30PM (#14999189)
Now try complex logic, only break here if this this and that happened just before. GDB can be much better for that.

Where VS shines for me is inspecting the state of datastructures. As long as you don't need to do any complex search on them, or programmatically walk a graph of them.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by jjoonathan on Saturday August 12, 2017 @11:26AM (#14998203)
> a binary

I'm not sure that there's a VS project and source code available for the binaries in question.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by to3m on Saturday August 12, 2017 @11:44AM (#14998291)
Well if there isn't, you can start the EXE and do Debug|Attach from VS. Or (I think?), you can go to File|Open Solution, open the EXE directly, and let VS create a temporary solution for you that will let you run the EXE as a debuggee by pressing F5.

If you're debugging an EXE without source because you're writing a plugin or addon for it as a DLL, and you want todebug that DLL, you can specify the EXE in question as the EXE to run when you start debugging as part of the properties for the project for the DL in question. Visual Studio will spot when your DLL loads, load the debug info for it, and activate any breakpoints and so on. Works well.

(If your addon runs as a child process, you need the Child Process Debugging tool. Transformative. Get it here: https://marketplace.visualstudio.com/items?itemName=GreggMis...)

When you don't have source code, VS is not the best environment ever - it's oriented very much towards worknig with C/C++/etc., and there's a few options you have to play with to get it to show you disassembly and so on. But it's adequate. (One thing I like about it very much is that the step commands are the same whether you're stepping through source code or whether you're stepping in the disassembly window. I'll put up with quite a lot in exchange for that.)

Re:Give me 15 minutes and I'll change your view of GDB (2015... by goldfire on Saturday August 12, 2017 @12:13PM (#14998451)
In Visual Studio 2017 you can open an executable directly and begin debugging it without having either of those things.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by jcelerier on Saturday August 12, 2017 @02:20PM (#14999144)
So... just like every IDE that integrates GDB then ?
Re:Give me 15 minutes and I'll change your view of GDB (2015... by alkonaut on Saturday August 12, 2017 @04:12PM (#14999727)
Exactly. gdb is just like gcc. I can see the point of having a command line version of a compiler for toying and for automation/build scripts etc, but I rarely see the need to type out compiler commands. Same with a debugger.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by alkonaut on Saturday August 12, 2017 @03:48PM (#14999607)
Debugging a binary that you don't have source to, and that you don't intend to modify the reduces the benefit of the full IDE (where your syntax view in debugging is the same as your editor). Still, you get all the niceties of the IDE. You break on a line, step further on some lines. Notice the bug happen after y = foo() + bar(). So you wonder "where are those?" and you F12 with the cursor on the method name to nav to that method once there you set a breakpoint on the first line, and run so you debug that next.

Also, if you add in edit-and-continue so you can modify the code and have it automatically recompiled and keep debugging it, that adds value too.

I assume that various editor adaptations for vim/emacs etc means that you get almost all the IDE experience with gdb as well (symbol navigation, syntax highlight etc) and at that point there is of course little difference between one IDE and another.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by jcelerier on Saturday August 12, 2017 @02:19PM (#14999140)
you have plenty of graphical frontends that bring it "down" to the ease of use of VS. I like QtCreator's gdb integration personnally.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by davidreiss on Saturday August 12, 2017 @08:17AM (#14997596)
> That early dig against Windows was particularly funny. There's no way I would pick that over Visual Studio's debugging tools.

Throw in the Sysinternals suite and hopefully powershell continues to improve and you have a very nice debugging/sys admin/etc toolset.

I just wished windows had the elegance of the unix-style file system and was as open as linux/bsd/etc.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by pjmlp on Sunday August 13, 2017 @05:23AM (#15002212)
What is at all elegant in UNIX style file systems?!

Windows is as open as OS X, HP-UX, Aix, Solaris, OS/400, ....

Re:Give me 15 minutes and I'll change your view of GDB (2015... by pthreads on Saturday August 12, 2017 @07:31AM (#14997489)
>I still do, but I used to too.

I see what you did there. - Mitch Hedberg

Re:Give me 15 minutes and I'll change your view of GDB (2015... by user432468 on Saturday August 12, 2017 @10:33AM (#14998007)
Re:Give me 15 minutes and I'll change your view of GDB (2015... by kakarot on Saturday August 12, 2017 @08:23AM (#14997622)
If you are curious as to why you're being downvoted, it's because this comment adds no substance and states something completely obvious.

In other words, it was unnecessary. That kind of stuff is for reddit.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by pthreads on Saturday August 12, 2017 @08:57AM (#14997714)
No, I am not curious. I know exactly why I am being downvoted.

HN'ers sometimes need to lighten up a bit. A little humor among thousands of serious comments (many not useful) is not going to bring down HN and it is incorrect to assume it doesn't add any substance. My comment was not crass, sarcastic, degrading or mean. It was appreciating the commenter's sense of humor in a harmless way.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by jwilk on Saturday August 12, 2017 @11:05AM (#14998115)
There was no humorous value in your comment.

People who are familiar with Mitch Hedberg's work don't need any help in recognizing the quote.

For people who haven't heard about Mitch Hedberg, your comment doesn't make any sense without further research.

To me it sounded like you're bragging that you understood the reference.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by dasil003 on Saturday August 12, 2017 @12:59PM (#14998720)
The comment tells you to go look up Mitch Hedberg, that's much more useful than further explanation since explanation is the death of humor.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by nmg on Saturday August 12, 2017 @09:20AM (#14997794)
off-topic.
Re:Give me 15 minutes and I'll change your view of GDB (2015... by pmoriarty on Saturday August 12, 2017 @01:47PM (#14998943)
This is another example where HN needs tags.

The original humorous comment could have been tagged "humor" and the parent reply could have been tagged "meta", and an HN reader could have their client filter posts based on their preferences: if they want to see humor or meta posts, they could have them -- if they don't they won't and their feed will be leaner and less annoying to them, and there'll be less need to downvote "off-topic" posts.

Then everyone would be happy.

Re:Give me 15 minutes and I'll change your view of GDB (2015... by SimonPStevens on Saturday August 12, 2017 @03:12PM (#14999446)
I really like this idea.

[meta], [general-agreement], [non-contributing]

Re:Give me 15 minutes and I'll change your view of GDB (2015... by kakarot on Sunday August 13, 2017 @01:27AM (#15001666)
Until people spam the non-contributing tag on posts they don't like in an attempt to silence them, and companies abuse it to try and cover up posts that badmouth them, giving mods a constant headache.

[non-contributing]

Re:Give me 15 minutes and I'll change your view of GDB (2015... by nocman on Saturday August 12, 2017 @10:10AM (#14997936)
If you are curious about why you are totally wrong, his comment was NOT unnecessary, and it DID add substance.

I had never heard of Mitch Hedberg, and therefore did not get the quote, and now I have enjoyed several clips of his comedy routines.

I agree with the pthreads, many people on HN are far too quick to hit the "that stuff is for reddit" button, and could definitely lighten up a bit.