The following smal pascal program is stored in file named TestProgram.pas in the current working directory.

program TestProgamm;
   var
      i : Integer;

begin
   for i := 1 to 5 do
      writeln('Test');
end.


It compiles successfully with:

  fpc -g TestProgram.pas

An object file named TestProgram.o and an executable named TestProgram is produced in the cwd.

Invoking GDB with

  gdb TestProgram

yields:

GNU gdb 5.3-20030128 (Apple version gdb-330.1) (Fri Jul 16 21:42:28 GMT 2004) ...BLAH...BLAH...
(gdb)


That is fine so far. But here is the issue:

    (gdb) break TestProgram.pas:6

gives the error message:

    No source file named TestProgram.pas.

while

    (gdb) break testprogram.pas:6

gives the success confirmation:

    Breakpoint 1 at 0x1fc08: file testprogram.pas, line 6.


(gdb) run
Starting program: /Users/Rolf/Programmieren/Xcode/Pascal/TestProgram/TestProgram
Reading symbols for shared libraries . done


Breakpoint 1, P$TESTPROGAMM_main () at testprogram.pas:6
6          for i := 1 to 5 do


This is not a really big issue when using GDB from the command line. I simply have to remember to input the filenames in lower case letters for setting breakpoints.


However, setting breakpoints that do work by the way of Xcodes GUI is not possible, because Xcode insists on using the original mixed case file name. I searched for hours to no avail to tell either Xcode to use lower case letters or to say GDB to ignore the case ("set case-sensitive off" in GDB does NOT do the trick).

The lowercase filename comes into the .stabs of the TestProgram due to the routine TGNUAssembler.WriteFileLineInfo of aggas.pas at line 237 of the fpc compiler. If I change that line from:

   AsmWriteLn(#9'.stabs "'+lower(FixFileName(infile.name^))+'",'+

to

   AsmWriteLn(#9'.stabs "'+FixFileName(infile.name^)+'",'+

and compile fpc first and then again my TestProgram, then GDB happily accepts the mixed case file name for seting breakpoints, and all the features of Xcode can be used to source level debug fpc programs.

So, PLEASE, PLEASE, PLEASE, can someone change line 237 in aggas.pas as indicated. It would be OK, to make the change conditional for the target Darwin.

Just for my curiosity, how does this work with case sensitive filesystems. My understanding of what´s going on tells me that setting breakpoints in mixed case files e.g. in Linux does´t work even when using lower case letters for the breakpoint, as long as line 237 of aggas.pas is not changed.

Best regards

Rolf

__ InstantWare ______________________________________________________
 Dr. Rolf Jansen * Stephanienstraße 19 * D-76133 Karlsruhe * Germany

 http://InstantWare.bei.t-online.de/
_____________________________________________________________________


_______________________________________________ fpc-devel maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to