0
Files
src/docs/qtcreator.md
Alexis Menard 701a565c93 QtCreator doc fixes
Some tweaks in the instructions to make sure it's friendly to macOS.

Changed the path for clang-format since the current solution will
not work as it will output :
"Set CHROMIUM_BUILDTOOLS_PATH to use outside of a chromium checkout."

There is no way to tell QtCreator about CHROMIUM_BUILDTOOLS_PATH before
it runs clang-format so the solution is to point right away to the
right binary.

Change-Id: Icad9d6998063c2b70fc50027161c212063b06c25
Reviewed-on: https://chromium-review.googlesource.com/1044762
Reviewed-by: Jianpeng Chao <chaopeng@chromium.org>
Commit-Queue: Alexis Menard <alexis.menard@intel.com>
Cr-Commit-Position: refs/heads/master@{#556825}
2018-05-08 16:27:49 +00:00

144 lines
5.0 KiB
Markdown

# Use Qt Creator as an IDE or debugger UI
[Qt Creator](https://www.qt.io/ide/)
([Wiki](https://en.wikipedia.org/wiki/Qt_Creator)) is a cross-platform C++ IDE.
You can use Qt Creator as a daily IDE on Linux or Mac, or just as a GDB/LLDB
frontend (which does not require project configuration).
[TOC]
## IDE
### Workflow features
* Built-in code completion.
* Navigate to classes, files, or symbols with `ctrl+k` or `cmd+k` (macOS).
* Switch between declaration and definition with `F2`.
* Build with `ctrl+shift+b` or `shift+cmd+b` (macOS).
* Build and run with `ctrl+r` or `cmd+r` (macOS), or debug with `F5`.
* Switch between the header file and cpp file with `F4`.
### Setup
1. Install the latest Qt Creator.
2. Under chromium/src `gn gen out/Default --ide=qtcreator`.
3. Start it with `qtcreator out/Default/qtcreator_project/all.creator`.
4. Help - Plugins - check ClangCodeModel to enable std completion.
It takes 3 minutes to parse all of chromium's C++ files on my workstation!!! And
it does not block while parsing.
#### Code Style
1. Help - About Plugins (or app menu on macOS), enable Beautifier.
2. Tools - Options (Preferences on macOS) - Beautifier
Make sure to tick - Enable auto format on file save"
Select ClangFormat as the tool
Go to Clang Format tab
Change the Clang format command to: `$chromium_checkout_dir/src/buildtools/$os/clang-format`, and
set `Use predefined style: file`. You can also set a keyboard shortcut
for it.
3. Tools - Options - C++ - Code Style, import this xml file.
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorCodeStyle>
<!-- Written by QtCreator 4.2.1, 2017-02-08T19:07:34. -->
<qtcreator>
<data>
<variable>CodeStyleData</variable>
<valuemap type="QVariantMap">
<value type="bool" key="AlignAssignments">true</value>
<value type="bool" key="AutoSpacesForTabs">false</value>
<value type="bool" key="BindStarToIdentifier">false</value>
<value type="bool" key="BindStarToLeftSpecifier">false</value>
<value type="bool" key="BindStarToRightSpecifier">false</value>
<value type="bool" key="BindStarToTypeName">true</value>
<value type="bool"
key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
<value type="bool" key="IndentAccessSpecifiers">true</value>
<value type="bool" key="IndentBlockBody">true</value>
<value type="bool" key="IndentBlockBraces">false</value>
<value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
<value type="bool" key="IndentClassBraces">false</value>
<value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
<value type="bool"
key="IndentDeclarationsRelativeToAccessSpecifiers">false</value>
<value type="bool" key="IndentEnumBraces">false</value>
<value type="bool" key="IndentFunctionBody">true</value>
<value type="bool" key="IndentFunctionBraces">false</value>
<value type="bool" key="IndentNamespaceBody">false</value>
<value type="bool" key="IndentNamespaceBraces">false</value>
<value type="int" key="IndentSize">2</value>
<value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
<value type="bool" key="IndentSwitchLabels">false</value>
<value type="int" key="PaddingMode">2</value>
<value type="bool" key="ShortGetterName">true</value>
<value type="bool" key="SpacesForTabs">true</value>
<value type="int" key="TabSize">2</value>
</valuemap>
</data>
<data>
<variable>DisplayName</variable>
<value type="QString">chrome</value>
</data>
</qtcreator>
```
#### Build & Run
1. (Optional) Enable the issues pane for easy navigation to the location of
compiler errors. qtcreator expects to find compiler errors on stderr, but
ninja forwards all subcommand output to stdout. So use the following wrapper
script to forward it to stderr instead.
```
#!/bin/sh
/path/to/depot_tools/ninja "$@" >&2
```
2. In the left panel - Projects, set up the ninja command in the build and
clean steps, and add the path to chrome in the run configuration.
## Debugger
**You can skip the project settings and use QtCreator as a single file
standalone GDB or LLDB (macOS) frontend.**
For macOS :
1. Open the file you want to debug.
2. Debug - Start Debugging - Attach to running Application, you may need to
open chromium's task manager to find the process id.
For Linux :
1. Tools - Options - Build & Run - Debuggers, make sure GDB is set.
2. Tools - Options - Kits, change the Desktop kit to GDB (LLDB doesn't work on
Linux).
3. Open the file you want to debug.
4. Debug - Start Debugging - Attach to running Application, you may need to
open chromium's task manager to find the process id.
### Tips, tricks, and troubleshooting
#### [Linux] The debugger exits immediately
Ensure yama allows you to attach to another process:
```
$ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
```
#### [Linux] The debugger does not stop on breakpoints
Ensure you are using GDB on Linux, not LLDB.
#### More
Linux :
See
https://chromium.googlesource.com/chromium/src/+/master/docs/linux_debugging.md
macOS :
https://dev.chromium.org/developers/how-tos/debugging-on-os-x