Code coverage not showing results using Xcode + gcov Code coverage not showing results using Xcode + gcov xcode xcode

Code coverage not showing results using Xcode + gcov


Thanks for all the info on stackoverfow and CubicleMuses

I have code coverage working for both simulator and device! Here are the steps and configuration that worked for me:

Configuration : Xcode 4 !

XCode project settings

Build Settings

  • Other Linker Flags: add "-lgcov"

  • GCC_GENERATE_TEST_COVERAGE_FILES: Setto YES

  • GCC_INSTRUMENT_PROGRAM_FLOW_ARCS: Setto YES

  • C/C++ Compiler Version: GCC4.2 (if you are on XCode 4) iOS deployment target: 4.2
  • Precompile prefix header: NO

Info.plist

  • Set UIApplicationExitsOnSuspend flagin your Info.plist to YES

Above steps are same for Simulator and Device however, we have some extra work to make it work on Device.

Main.m: Copy paste the below code to main.m

const char *prefix = "GCOV_PREFIX";const char *prefixValue = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] cStringUsingEncoding:NSASCIIStringEncoding]; // This gets the filepath to the app's Documents directoryconst char *prefixStrip = "GCOV_PREFIX_STRIP";const char *prefixStripValue = "1";setenv(prefix, prefixValue, 1); // This sets an environment variable which tells gcov where to put the .gcda files.setenv(prefixStrip, prefixStripValue, 1); // This tells gcov to strip the default prefix, and use the filepath that we just declared.

Note: Make sure the above code is before:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];int retVal = UIApplicationMain(argc, argv, nil, nil);[pool release];    return retVal;

Why we set the above coverage variables?

http://gcc.gnu.org/onlinedocs/gcc/Cross_002dprofiling.html

How to get the .gcda files?

Use the Organizer in Xcode to download app's package from the device to get the .gcda files out of the Documents directory.

Note: I could not get the code coverage using Xcode 3.2.5 with the same settings. But Xcode 4 was a cake-walk :-)


Thanks Sangavi since your answer helped me.

Now the but:I followed your descripition step by step and than I had the problem that no gcda-files were created (only gcdo-files).

After that I removed your (above) prefix-code which I copied in the main.m and everything worked suddenly. Bet the gcov-path was not created correctly or something.

Just posting this if anyone runs into the same issue.


I just figured out after hours of frustration that enabling distributed builds in Xcode 3.2.6 will work around the need to disable your prefix header.