## Carbide.c++ Release Notes 2.4.0

The Carbide.c++ is a comprehensive development tool suite for Symbian OS that is based on the Eclipse framework. The C++ Development Toolkit (CDT), provides the foundation for project and build tools management, as well as the primary interface for the debugger to communicate with the IDE.

This is a collection of important information concerning last-minute changes and other topics that deserve special attention. Please read these notes carefully before using the Carbide tools so you understand the current limitations and workarounds for known issues.

- What's new
- User notes
- Fixed bugs and workarounds
- Technical support

Once you have read the release notes, we recommend you follow the HelloWorld tutorial for a quick introduction to Carbide.c++.

WARNING: Updating the CDT feature in Carbide.c++/Eclipse will wipe out our changes making the tools unusable!

See the Tips & tricks page for more helpful information.

### What's New in 2.4.0

The following features for Symbian development are provided within Carbide.c++:

- Qt Tools 1.6 now supported.
- The Run builds concurrently option in the Builds preference panel now supports up to 50 concurrent build jobs, up from 4.

#### 2.3.0

- P2 update services now supported. Updating Carbide.c++ should be more flexible and easier than before.
- The official Qt code style is now included in the Code Style preference panel.
- Single file compiles on Raptor are now supported.

#### 2.2.0

- Eclipse 3.5 — The Eclipse 3.5 project (Galileo) provides the foundation, or integration platform, on which Carbide.c++ is built. See What's New in 3.5 for more information.
- CDT 6.0 — The final version of CDT included as part of the Galileo release. See the CDT 6.0 News and Noteworthy page for more information.
- Java 6.0 — Due to the above changes Carbide has also updated to use the Java Runtime Environment (JRE) 6.0. See Java SE 6 Release Notes page for more information.
- SBSv2 arguments field - added a text field to the Build > SBSv2 panel to allow parameter passing to Raptor builds.
- Carbide.c++ News Reader - now uses the proxy data provided by Eclipse when creating help connections.

#### 2.1.0

- Performance improvements - the following areas of Carbide have been optimized to improve performance:
  - Importing large projects - Importing large projects is one of our primary points of performance improvements. When too many project roots were used the more source and include paths were brought into the project, up to an including entire SDKs. Generally, we found that once a project root contains over 15-20K files Carbide became extremely sluggish. We have improved some edge cases where project roots were calculated incorrectly and now include only what's really needed.
  - Modifying Project Settings and Build Configuration Data- This is quite a significant improvement as modifying MMP files and switching build configurations are a couple of the most common operations done by end-users and because the time spent processing project and configuration data is done on the main thread, locking the UI. With optimization in one CDT function we were able to bring most project-related and configuration switch changes from 20 seconds to less than 3 seconds. You should also see improvements when saving MMP and INF files (the "Refreshing Configuration Job").
  - Executables View Refreshing - The Executables view refresh was impacting everything from IDE start-up to import and project creation as well refreshes during rebuilds. Some of our wall clock tests on large projects (such as contacts the browser) show the executables job running from 15-25 seconds down to about 5 seconds.
  - Indexing Options - Use the Indexing Options section in the Carbide.c++ preference panel to control how project MMP files are indexed.
- New Launch Configuration improvements - The New Launch Configuration wizard now starts with a new Category Selection page which helps guide developers in choosing the correct launch configuration for a project, whether it be for Phones, Boards, or other target devices. In addition, the Build Options Selection page enables developers to define if a project is automatically built or not at the launch configuration level.
- Customization (.bsf) and Symbian Variant Binary (.var) platform discovery is now supported. See the Platform Filtering Preference panel for details.
- TRK improvements - TRK continues to evolve and now includes these improvements:
  - TRK now automatically reconnects if you disconnect the USB cable and then reconnect.
  - Added support for targeting nested static libraries of a polymorphic dll.
  - TRK now checks for duplicates before adding a library to the target list to avoid sending duplicate library loading commands (bug 9035).
  - Users no longer need to specify a port number for Bluetooth connections as TRK now automatically locates BT serial port and uses that for the connections setup (bug 2502).
- Keywords in preference panels and property pages - All Carbide related preference panels and project property pages now include keywords to make searching for options a bit easier.
- New Carbide Extensions section - Project Property dialogs now include a Carbide Extensions section which allows Carbide plug-in and utilities a place to add their own project settings pages.

#### 2.0.4

- Hover Help - hover your pointer over a recognized Symbian symbol in an editor and see the Symbian API Reference information appear to assist you.

#### 2.0.3

- Carbide.c++ News Reader - introducing the Carbide.c++ News view which provides the latest Carbide, Symbian, and S60 news as well as news on tools updates and screencasts for Carbide development.

#### 2.0.0

- Eclipse 3.4.1 — The Eclipse 3.4 project (Ganymede) provides the foundation, or integration platform, on which Carbide.c++ is built. See What's New in 3.4 for more information.

- CDT 5.0.1 — The final version of CDT included as part of the Ganymede release. See the CDT 5.0 News and Noteworthy page for more information.
- SDK Migration support in CodeScanner — CodeScanner now includes support for S60 SDK rules that provide helpful migration information on S60 functions within any C/C++ editor view and provide links to additional information within the SDK documentation or web. Very helpful during development to keep you code up-to-date with the latest SDK revisions.
- Qt SDK for S60 support — Carbide now supports the importing and creation of Qt projects using the Qt SDK for S60.
- Executables view improvements — The Executables view now supports the loading of some additional DLL cases to ensure that the DLLs you want to debug are available during a debug session. In addition, a Remove button has been added to the view's toolbar that makes it easier for you to remove any executables from the list.
- More indexer improvements — Speed improvements for code completion, syntax coloring, and much more.
- Remote Connections view — A visual list of remote connections and their state for managing multiple and diverse device connections.
- Partial upgrade SIS file support — Carbide now supports the generation of partial upgrade SIS/SISX files. This increases debugger turnaround by only generating new files for changes and uploading these smaller executables to the device.
- More Program Counter support — Added a Move to Line command for the debugger that enables you to move the PC to a new line while debugging without executing any intermediate lines or resuming execution.
- Multiple TRK improvements including:
  - Both App and System TRK try to disable mobile crash debugging
  - TRK now looks for the new mobile crash agent (ms_useragent)
  - Added additional error checking when communicating over USB to improve stability
  - Fixed some random TRK deadlocks when reading registers or when thread panics occur
  - Option > Exit has been replaced by Option > Back to reflect the change made to exiting TRK
  - Changes made to use UIDs in place of component names to identify executables for improved identification
  - Reset TRK priority to high to avoid problems debugging complex process intensive applications
  - Improved breakpoint location in DLLs when debugging multiple processes
  - TRK no longer targets processes with UID 0 automatically. Users can still attach to the process or use a launch configuration.
  - TRK application name and UID changed to blocking of TRK SIS files assigned with the old UID.
  - TRK now always uses the kernel APIs to read/write memory to improve security, no more direct reads/writes.
  - Application TRK no longer allows write operations to the following registers: CPSR, SP, and LR

#### 1.3.1

- On-Device Setup dialog — connects, verifies and updates Carbide software services like the TRK debug agent on a device to ensure you are always using the latest version in your development efforts. Having trouble connecting with TRK, give this a try.
- New Bug Report wizard — directly submit bugs and enhancement requests to Carbide Bugzilla from within Carbide using the Help > New Bug Report menu option. Enter the name and password into the Bug Reporter preference panel and quick bug reports are easy to submit.
- Launch configuration panels UI unification and improvements— a host of minor UI improvements are being made in the launch configuration panes to provide a more coherent and reproducible experience across all launch configuration dialogs.

> For example, the concept of a "main executable" had been replaced with the Executables tab where a list of executables targeted for debugging were shown. This UI change brings the launch configurations into sync with that change by removing the Main Executable from the Main tab. The Main tab will only show a process to launch and not executables targeted for debugging.

> Another example, the Arguments field used by the run-mode TRK configurations has been moved to the Arguments tab to match the Emulator configuration.

- Many other bug fixes to improve stability and usability on Carbide

#### 1.3.0

- Eclipse 3.3.1.1 — The Eclipse 3.3 project provides the foundation, or integration platform, for which the product is built upon. See What's New in 3.3 for more information.
- CDT 4.0.1 — This drop is based on a final version of CDT that was part of the Europa release. See the CDT 4.0 News and Noteworthy page for more information.
- Build system improvements — large project support has been enhanced for builds and indexing, but performance trade offs have been made so the latter improvements are possible. This is most noticeable when importing projects and making changes to bld.inf and mmp files.
- System search — search any directory outside the workspace.
- Debugging improvements include:
  - Executables view — provides a dynamic list of executables and their related source files
  - Executables tab — uses a rule based approach in launch configurations to include/exclude executables in the project
  - On-device debugging — lots of TRK (v2.8.6) fixes here to make on-device debugging easier and more stable
- Carbide tool plug-ins include:
  - CodeScanner - a static source code analysis tool for Symbian OS programs written in C++
  - Capability Scanner and Epocwind.out Scanner - performs static and runtime capability checks on your project
  - Dependency Explorer - analyses static dependencies between components
- Indexing improvements
- The creation of EKA1-based projects has been deprecated with this release. Carbide still supports its use but all development going forward will concentrate on EKA2-based projects.
- Lots of bug fixes...

### User Notes

- New extension makefiles - if your project is using the new extension makefile support in OS9.3+ (prj_extensions), you will get a build error with the default builder settings. We plan to fix this issue, but for now you can work around it by disabling the manage dependencies and concurrent compilation builder options found in the Carbide.c++ > Build preference panel.
- Qt for Symbian support - The Qt views require registered COM plugins in order to work correctly. These plugins are registered by our installer. If you did not use our installer or have uninstalled an existing Qt Eclipse integration after installing Carbide, you'll need to register the plugins by running a batch file. You'll find the batch file here: \configuration\qt\register_plugins.bat. You'll know that you need to run the batch file if you get exceptions when opening one of the Qt views.

### Fixed bugs and workarounds

- Complete list of Carbide.c++ bugs fixed
- Workarounds for known issues:

Summary | Workaround
--- | ---
CRITICAL ITEMS
WARNING: The C/C++ Files view is a view of the actual FILE SYSTEM, so anything deleted in this view is also deleted from the file system. | When deleting projects from the workspace please be sure you read the dialog that describes the files that will be deleted. Select the "Do not delete files" option to keep them in the file system.
Carbide.c++ terminates on startup on low memory machines | Machines with less than 1GB of memory (or machines running in a virtual machine) may experience start-up problems. Error dialog typically contains: JVM terminated, Return code = -1 or when running from eclipse.exe: Error occurred during initialization of VM Could not reserve enough space for object heap The solution is to edit your Carbide.c++.2.x.ini (or eclipse.ini if launching Eclipsec.exe) and use a smaller value for the -Xmx parameter to the JVM. NOTE In this scenario, Carbide.c++ performance may degrade.
[4587] Unable to build GCCE targets on Vista because of makefile error. | There are known tooling issues when building for the GCCE platform under Windows Vista that can prevent a GCCE build from occurring. If you want to build for GCCE under S60 and UIQ you will need to manually update some files under \epoc32\tools\. See the article Windows Vista for up-to-date workaround information.
IDE
Debugging a project on a machine running Vista via "Remote Desktop Connection" does not work. | Workaround: Switch the project to a machine running Windows XP in order to use "Remote Desktop Connection".
[6414] Using Mylyn causes MMP files to be spell checked and common terms like EXE, CPP, and EUSER.LIB flagged as misspellings in editor views | Workaround: Remove Mylyn from the Carbide installation.
The C/C++ Editor will only work properly with files inside project source folders or on include paths. Source folders are configured in the project settings on the C/C++ Project Paths > Source tab. | When creating new folders, use File > New > Source Folder. This will add a folder and mark it a source folder. If you need to import copies of existing files (File > Import > File System) or link to existing sources (File > New > Folder with "Link to folder in file system"), then a normal folder will be created, not a source folder. If the folder is not underneath an existing source folder in the project, you will need to manually mark it as a source folder using the C/C++ Project Paths > Source tab.
[3803] Occasionally a module is not expandable immediately after it's been imported in a project. | Workaround: Simply close and reopen the project using the context menu in the Project view.
[3010] Bad synchronization in MMP editor for Linker definition file. | The templates for Symbian DLL projects do not define a DEFFILE statement, for the case where a DEF file is not needed or imports are not frozen. If you edit the DEF filename through the MMP editor, it is not automatically conditioned for the current target. If you wish to define target-specific DEF file names in the MMP editor, manually insert #ifdef...#endif blocks, or first uncomment the #ifdef...#endif block from the template, so that target-specific filenames will be properly updated.
[2784] Changes to contents of #includes of bld.inf and MMP files are not performed -- instead, changes involving reordering or deleting go to the main file. | Workaround: if making changes to nests of included files, either manually edit the #included files, or if using MMP or bld.inf editors, look for changes in the main bld.inf or MMP file and manually fix them up.
Indexer coloring for problems | The problems marker for the indexer occasionally reports both false negative and false positive results (see indexer bugs below). The problems color by default is set to a dark gray to suggest a possible ambiguous state of the browser. You can change this color under the global preferences page: Syntax Coloring.
[4932] Indexer: Problems with templates | C++ template navigation is not fully supported yet. Problem areas are notable when templates are declared outside the file they are used and when functions or macros use template declarations.
[4937, 4941] Indexer: Problems with macro navigation | Browsing to macro declarations is problematic when macros are used within function call parameters as well as multi-line macro declarations.
[4931] Indexer does not track files outside the workspace. | If you make changes to files outside the workspace the indexer will not re-index these files (e.g. .rsg files under the SDK). When in doubt, re-index your project.
[4906] Indexer: const parameters get lost in function prototypes occasionally | The indexer sometimes loses the parameter of function types for const objects. In these cases code navigation will not work.
Target type macros (__EXE__, __DLL__, etc) are not always defined for the CDT indexer. | The CDT indexer macros are build configuration specific. There could be multiple mmp's for a build configuration, each with a different target type macro. Therefore the target type macro is only added if there is only one mmp file, or if all of the mmp's have the same target type macro. You can manually add the macro if you wish using the C/C++ Include Paths and Symbols project property page.
The C/C++ Projects and Symbian Project Navigator views do not always refresh with changes in the file system. | If you are in doubt about the contents select the folder in question, then hit F5 to refresh the directory from the file system.
Synergy 6.3 Installations will always crash Eclipse file navigation dialogs - The solution for this is to un-register cmexplorer.dll then reboot your machine. Un-registering this feature will only effect users that use Synergy integration to Windows Explorer. This issue is known to be fixed with Synergy 6.4. | The un-register command is: regsvr32 /u <path to dll>cmexplorer.dll To re-register, the command is: regsvr32 <path to dll>cmexplorer.dll
BUILD/IMPORTER
[3804] My application fails to start the first time I try to debug it using TRK. | Workaround: Launch the debug session again.
[3809] IMPORTANT: You cannot import two projects into Carbide that have the same "Root Directory". | If a .project file already exists in this location you either need to shorten or lengthen the "Root Directory" or delete the other project in the same location and try to import again.
Emulator (WINSCW) command line builds | If you want to build for the emulator from the command line, run the tool from the start menu shortcut: Configure environment for WINSCW command line builds. It will setup the necessary environment variables for the x86 compiler. You do not need to do this if you will only be building emulator targets from the IDE.
Working with a workspace on one drive and a source base on another can build some items in the wrong location. | Workaround: keep your source base and Carbide workspace on the same drive. Because some scripts work off an implicit root (e.g. \epoc32\include\) and don't support drive specs on paths there can be outputs to unexpected locations.
When creating/importing projects the sources and SDK must be on the same drive. | For example, you cannot create a project on the C: drive and build with an SDK whose EPOCROOT is M:\. This is due to many of the internal SDK tools using an implicit working drive to calculate paths (e.g. \epoc32\tools).
Files that include non-ascii character types will not compile correctly with GCCE if the file type is not saved as UTF-8. | The workaround is to change the text file encoding in the global preferences at Windows > Preferences, then open the General > Editors panel in the Preferences window. Look for the Text file encoding option as shown below.
Build system does not detect static library dependencies | The Symbian OS build system did not detect static library changes prior to 9.2. They have release a patch for this here.
DEBUGGER
Unable to install TRK on flashed devices | Workaround: Some devices contain images that won't allow TRK to be installed, specifically the Lumiere PR 1.0 and PR 1.1 releases, especially if the C drive image was flashed. To install TRK on these devices you must format the C drive to remove the old flash image, then reflash using an image containing TRK.
[3778,4658] Some variables show "Invalid format" in the Variable view. | No Workaround.
Symbian OS Data view caveats. | During crash debugger launch session, you can examine Symbian OS data (processes, threads, chunks etc) in Symbian OS Data view. But: (1) You must have Symbian kernel debugger (usually Kdebug.dll) built in the image. (2) As getting the OS data from crash debugger is time consuming (takes more than one minute in our test), auto-refresh of the data in Symbian OS Data view is disabled for crash debugger. You need to click the "Refresh" button to do a manual refreshing.
[2616] If you cast a variable to another type the details pane will still show the original type | No Workaround.
[2960] The thread run control icons (step over, step in, run) are sometimes disabled after stepping | Click on the top frame of the suspended thread in the Debug view
Debugging without restarting the emulator. | If you modify any resource files resulting RSC files cannot be rebuilt, however CPP source files can. There are a couple of issues you should be aware of. 1) When starting a build, the debugger releases all file handles to the debugged application. Sometimes the emulator is slow to release its own handles to files after quitting an application. If a file is still locked on a rebuild make sure the application is closed (not the emulator itself), wait a few seconds, and try again. 2) When setting breakpoints in source files that have been recompiled they do not always resolve correctly while the emulator is running. The best option is to clear the breakpoints in any modified file and set them again.
[2716] [Variable View] - Sometimes when stepping through a loop variables do not refresh. | If you have refresh problems with variables, put focus on the variables pane, then off the pane and back onto the variable pane.
[1928] [Register View] Casting Registers to any type does not work. | Not currently supported.
The value of some uninitialized variables is shown as "Unknown error ...." | When variables are in scope the proper value will be displayed.
[548] [Variable Scoping] - Multiple variables with the same name in subscopes are not displayed properly. | Give variables unique names.
[971] Watchpoints cannot be set on global variables declared in header files. | No workaround.
[1959] Expressions cannot be disabled. | No workaround.
[Add Global Variables] Not all global namespace variables are displayed or duplicate entries sometimes appear. | No workaround.

### Technical support

The following support services are available:

- Visit the Symbian Foundation for Carbide.c++ and Symbian development information
- Read the Carbide.c++ On-device Debugging whitepaper or an introduction to on-device debugging for S60 3rd Edition devices