On Tue, 25 Aug 2015, Martin Frb wrote:

On 25/08/15 11:06, Michael Van Canneyt wrote:

I'm debugging a program, and it just won't debug inside lazarus.

When I look at the debug output in Lazarus, I see:

<-exec-run>
=thread-group-started,id="i1",pid="20658"
=thread-created,id="1",group-id="i1"
^running
*running,thread-id="all"
(gdb) =thread-exited,id="1",group-id="i1"
=thread-group-exited,id="i1"
^error,msg="During startup program exited with code 1."

The strange thing is that if I use gdb on the command-line, it does start and run the program,
and I can debug as I would expect it (albeit very rudimentary).
lazarus tries to set a break at entrypoint, and once that is reached it will set user breaks.

the last line/error is from the IDE, because that entry point brk was not reached.

2 possible solutions:
- a library interfers with the name "main". there is an option (tools/options/ debugger) to skip loading dll info http://wiki.lazarus.freepascal.org/GDB_Debugger_Tips#internal-error:_clear_dangling_display_expressions
- tools/options/ debugger  change the InternalStartBreak option

After a lot of testing, I tracked it to the run command-line I was using. It contains ? and other characters in need of escaping.

While I was using the exact same command-line on the console and in lazarus, 
there was a difference.
It has to do with the way gdb parses the arguments. It apparently uses the 
shell to expand the arguments to a program.
Which shell it uses depends on the environment.

I use tcsh as my shell, and apparently lazarus lets gdb use another shell.

Maybe adding an explicit command may help, there seems to be:

set startup-with-shell

For me, I fixed it by properly escaping the run command, and then all went well. It took me quite some time to find out :(

Hopefully people will learn from my experience :)

Michael.

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to