Recently I had to spend some time developing on MacOSX. Gentoo-Prefix sadly is getting less and less useful till we don’t make clang a first class citizen (People proposing a GSoC for it are welcome!) so I’m forced to use what’s provided by Xcode.
clang is wonderful for developing, it is arguably fast at building and the generated code isn’t that bad, beside when you are using asan and it miscompiles… (reported to the asan developers, they will have a look, gcc-asan works as expected.
The warning reporting is probably one of the feature I do miss in other compilers and that’s why I added it to cparser and I’m looking forward to move to gcc-4.9.
All in all clang developers increased the usability of the compiler and made the other projects improve as well, competition in opensource does work.
The linker is again different from the usual binutils, normally you do not notice it but with the new xcode you have to face it since some projects will have problems finding symbols. Again the reporting is quite good, not stellar as clang’s but when the missing symbols are C++ it does a better job than stock binutils in telling you what’s missing from where.
The new debugger probably isn’t really ready for the prime time. gdb gets its share of complaints about some of its quirks (macros system quite minimal and python interface good but not documented as it should), but it is really effective and fast to use.
lldb not. Almost every command that in gdb is a single statement in lldb it is two, usually with a compusory option. Setting breakpoints, watchers, moving through frames; everything gets more cumbersome to use.
The reporting is a little more confusing and the error messages can be misleading. And since when you are on debug there are problems and you might be under pressure, it doesn’t help at all.
While debugging some VDA hwaccel improvements for libav I got to spend quite a bit of time tracking why a pointer gets nulled. The watchpoint set to it triggered at random times in the innards of the osx memory management and I couldn’t actually see when or how that happens. I ended up writing a dummy hwaccel accessing the same fields on linux, run it through gdb and discover the actual problem in … 10minutes, code and reboots included.
I do hope we’ll see a better interface for lldb and further improvements on gdb (and hopefully make so clang + gdb and gcc + lldb interoperate better).