Wenn die Source-Dateien per #include eingebunden werden, dann ist das
auch kein Wunder.
Bedenke, daß die Auswertung von Headerdateien auf reiner Textebene
geschieht - ob Du main.c mit #includes übersetzt oder aber statt der
#includes deren Inhalt an die betreffende Stelle in main.c einfügst,
ist für den Compiler exakt dasselbe.
Die Objektdatei, die der Compiler erzeugt, enthält als Debughilfe nur
die Informationen über Zeilennummern, definierte Symbole etc, nicht
aber Dateinamen.
Somit sind alle von Dir verwendeten Symbole in der aus main.c erzeugten
Objektdatei definiert; anhand eines Symbolnamens kann der Debugger aber
nicht mehr
Wenn Du modular programmieren willst, dann solltest Du es "richtig"
anstellen:
Jedes Modul (*.c-Sourcefile) wird getrennt zu einer Objektdatei
übersetzt, diese werden gelinkt.
Damit Du aus einem Modul Funktionen oder Definitionen eines anderen
Modules verwenden kannst, erzeugst Du für jedes Modul eine gleichnamige
Headerdatei, in der Du die extern sichtbaren Prototypen etc.
deklarierst.
Dadurch bleibt die Zuordnung Objektdateiname-Symbol erhalten.
Wenn Du eine Library verwendest, muss diese Library bereits sämtliche
Debuginformationen enthalten; sonst weiss der Linker auch nicht mehr,
aus welchen Sourcemodulen die Library besteht.
Wenn die Library ebenfalls durch #include von Sourcefiles erzeugt
wurde, dann gilt obengesagtes.