gcc hat stark aufgeholt seit es llvm (clang) gibt. Die beiden nehmen sich nicht viel. Was gcc für sich hat ist, dass so manches an Software noch immer nicht mit llvm übersetzt werden kann (prominentestes Beispiel sei der Linux Kernel und hier besteht auch kein Interesse das je zu ändern).
gdb auf OSX ist eine heikle Sache, da es u.A. nicht funktioniert (das heißt meist reduzierte Funktionalität hat). In aller Regel funktionieren bestimmte gdb Versionen nur auf bestimmten OSX Versionen (wenn überhaupt). Immerhin ist das (debugging) eine Sache, die sehr tief mit dem OS verwurzelt ist. Mit dem Nutzen von lldb bist du hier auf der sicheren Seite.
Allerdings hat gdb deutlich mehr Features, z.B. reverse debugging. Noch offene Dinge in lldb:
https://lldb.llvm.org/projects.html
Als llvm frisch rauskam hat es ggc relativ vernichtet, dieser Zustand schwebt gerne noch in den Köpfen. Aber hier hat sich viel getan.
Bezüglich homebrew ist nur zu sagen, dass wenn du einen Paketmanager benötigst, es dieser ist, den du nutzen solltest.
Durch seine Architektur sind viele Dinge wie Kompilierprobleme doch enorm rar und seit den Bottles ist es noch einfacher. Selbst eine konfuse Umgebung auf dem Rechner kann Homebrew nicht mehr viel anhaben (etwas woran macports traditionell zu beißen hatte).
Homebrew ist aber auch noch lange kein fertiger Paketmanager mit den gleichen Features eines entsprechenden aus der Linuxwelt. Da frage ich mich manchmal, ob die Ressourcen bzgl. Entwicklung nicht etwas doof priorisiert sind.
Was mich dabei am meisten stört ist das mangelhafte (bzw. non-existente) dependency tracking. Beispiel: ich installiere ffmpeg und das holt sich als dependency libpng 1.0 mit rein. Dann update ich ein anderes Programm später welches als dependency libpng zu 2.0 updated. Nun müsste ffmpeg eigentlich neu kompiliert werden, aber brew bekommt diese Problemstellung nicht mit und macht entsprechend nichts. Das installierte ffmpeg ist nun nicht mehr nutzbar und crashed bei Verwendung, aber das bemerkt man natürlich nur, wenn man es benutzen will.
Die ganze Sache ist etwas komplizierter als das und hat noch mehr Variablen, aber gerade das genannte Beispiel tritt bei mir sehr häufig auf. ffmpeg hat halt einfach mal eben 10-50 dependencies, da passiert sowas auch schnell.
Historisch versucht(e?) brew das mit versionierten Formeln anzugehen (also libpng@1, libpng@2), was aber nicht des Rätsels Lösung ist, aus diversen offensichtlichen Gründen.
Brew kann auch keine Formeln löschen und dabei alle dependencies gleich mitentsorgen, die diese Formel als einzig Wurzel hatten. Da existiert glücklicherweise eine Art "Plugin" für, ist aber unmaintained und hat ein paar Probleme.
Das klingt jetzt alles relativ negativ und entsprechende Punkte werden Menschen, die mächtigere Paketmanager gewohnt sind, aufstoßen. Dennoch ist brew das imo beste, das ihr hier auf OSX bekommen könnt.