Skip to content

Commit dc29b3a

Browse files
committed
Add XCode debugging doc
1 parent 6d82966 commit dc29b3a

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
## Debugging with XCode
2+
3+
### Build Debug Electron with Release libchromiumcontent
4+
You can create a debug build of electron by following [build instructions for macOS](build-instructions-osx.md).
5+
The bootstrap process will download Release version of libchromiumcontent by default,
6+
so you will not be able to step through the chromium source.
7+
8+
### Build Debug Electron with Debug libchromiumcontent
9+
If you want to debug and step through libchromiumcontent, you will have to run the
10+
bootsrap script with the `--build_debug_libcc` argument.
11+
12+
```sh
13+
$ cd electron
14+
$ ./script/bootstrap.py -v --build_debug_libcc
15+
```
16+
This can take a significant amount of time depending on build machine as it has to
17+
build all of the libchromium source.
18+
19+
Once, the lib is built, create a symlink to the built directory under download
20+
21+
`ln -s vendor/libchromiumcontent/dist/main/shared_library vendor/download/libchromiumcontent/shared_library`
22+
23+
Electron debug builds will use this shared library to link against.
24+
25+
```sh
26+
$ ./script/build.py -c D --libcc
27+
```
28+
This will build debug electron with debug version of libchromiumcontent.
29+
30+
### Generate xcode project for debugging sources (cannot build code from xcode)
31+
Run the update script with the --xcode argument.
32+
```sh
33+
$ ./script/update.py --xcode
34+
```
35+
This will generate the electron.ninjs.xcworkspace. You will have to open this workspace
36+
to set breakpoints and inspect.
37+
38+
### Debugging and breakpoints
39+
40+
Launch electron app after build.
41+
You can now open the xcode workspace created above and attach to the electron process
42+
through the Debug > Attach To Process > Electron debug menu. [Note: If you want to debug
43+
the renderer process, you need to attach to the Electron Helper as well.]
44+
45+
You can now set breakpoints in any of the indexed files. However, you will not be able
46+
to set breakpoints directly in the chromium source.
47+
To set break points in the chromium source, you can choose Debug > Breakpoints > Create
48+
Symbolic Breakpoint and set any function name as the symbol. This will set the breakpoint
49+
for all functions with that name, from all the classes if there are more than one.
50+
You can also do this step of setting break points prior to attaching the debugger,
51+
however, actual breakpoints for symbolic breakpoint functions may not show up until the
52+
debugger is attached to the app.

docs/development/debugging-instructions-macos.md

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ by your JavaScript application, but instead by Electron itself, debugging can
55
be a little bit tricky, especially for developers not used to native/C++
66
debugging. However, using lldb, and the Electron source code, it is fairly easy
77
to enable step-through debugging with breakpoints inside Electron's source code.
8+
You can also use [XCode for debugging](debugging-instructions-macos-xcode.md) if
9+
you prefer a graphical interface.
810

911
## Requirements
1012

script/update.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ def parse_args():
2828
parser = argparse.ArgumentParser(description='Update build configurations')
2929
parser.add_argument('--defines', default='',
3030
help='The build variables passed to gyp')
31-
parser.add_argument('--msvs', action='store_true',
31+
group = parser.add_mutually_exclusive_group(required=False)
32+
group.add_argument('--msvs', action='store_true',
3233
help='Generate Visual Studio project')
34+
group.add_argument('--xcode', action='store_true',
35+
help='Generate XCode project')
3336
return parser.parse_args()
3437

3538

@@ -91,6 +94,8 @@ def run_gyp(target_arch, component):
9194
generator = 'ninja'
9295
if args.msvs:
9396
generator = 'msvs-ninja'
97+
elif args.xcode:
98+
generator = 'xcode-ninja'
9499

95100
return subprocess.call([python, gyp, '-f', generator, '--depth', '.',
96101
'electron.gyp', '-Icommon.gypi'] + defines, env=env)

0 commit comments

Comments
 (0)