1 | | = Configuring Debugger = |
2 | | |
3 | | Copy [https://trac.webkit.org/browser/webkit/trunk/Tools/VisualStudio/WebKit.natvis WebKit.natvis] to the appropriate directory, which contains custom views for WebKit fundamental types. |
4 | | |
5 | | = Debugging WebKit = |
6 | | |
7 | | There are three ways to debugging WebKit with Visual Studio. |
8 | | Openning the generated WebKit.sln, openning an exe file directly, and attaching running WebKit. |
9 | | |
10 | | 1. Invoke build-webkit, and open `WebKitBuild\Release\WebKit.sln` using Visual Studio. |
11 | | |
12 | | If you get errors about not being able to find `.props` files, run `Tools/Scripts/update-webkit`, then close and relaunch Cygwin and Visual Studio. |
13 | | |
14 | | 2. Set `MiniBrowser` as the solution's `StartUp` project. |
15 | | |
16 | | Select the `MiniBrowser` project in the Solution Explorer, then choose `Project > Set as StartUp Project`. This will cause the project to turn bold in the Solution Explorer. |
17 | | |
18 | | 3. Launch the debugger |
19 | | |
20 | | Choose `Debug > Start Debugging`. |
21 | | |
22 | | In Ninja builds, there is no solution files. In such case, open the exe file directly. |
23 | | |
24 | | {{{ |
25 | | devenv -debugexe .\WebKitBuild\Debug\bin64\MiniBrowser.exe |
26 | | }}} |
27 | | |
28 | | |
29 | | = Miscellaneous Tips = |
30 | | |
31 | | == Using the Microsoft and Safari Symbol Servers == |
32 | | Follow the [http://developer.apple.com/internet/safari/windows_symbols_agree.html instructions for using the Microsoft and Safari symbol servers] so that Visual Studio can show you backtraces that involve closed-source components. |
33 | | |
34 | | == Using Watch Window == |
35 | | You can open any of the Watch windows using the `Debug > Windows > Watch` submenu. |
36 | | |
37 | | [http://msdn.microsoft.com/en-us/magazine/default.aspx MSDN Magazine] published a very useful [http://msdn.microsoft.com/en-us/magazine/dd252945.aspx article about Watch window pseudo-variables and format specifiers]. Those of particular interest to WebKit developers are mentioned explicitly below, but the whole article is worth a read. |
38 | | |
39 | | * Adding `$err,hr` to the Watch Window will show you what `::GetLastError()` would return at this moment, and will show you both the numerical error value and the error string associated with it. |
40 | | |
41 | | == Calling CFShow == |
42 | | |
43 | | When debugging code that uses CF types, you can invoke the [http://developer.apple.com/mac/library/documentation/CoreFoundation/Reference/CFTypeRef/Reference/reference.html#//apple_ref/c/func/CFShow CFShow] function in the Immediate window (`Debug > Windows > Immediate` or `Ctrl+Alt+I`) to print a debug description of a CF object to the Output window like so: |
44 | | {{{ |
45 | | {,,CoreFoundation}CFShow((void*)0x12345678) |
46 | | }}} |
47 | | |
48 | | Note that you usually won't be able to pass a variable name as the parameter to `CFShow`, as the Immediate window will get confused and think you're specifying a symbol in `CoreFoundation.dll` rather than whatever code you're debugging. It's usually easiest just to pass the address of the object directly as above. |
49 | | |
50 | | == Debugging Multiple Processes == |
51 | | |
52 | | You can attach a single debugger to more than one process. To do this, launch or attach to the first process, then use `Tools > Attach to Process…` or `Ctrl+Alt+P` to attach to the second process. Your breakpoints will apply to both processes. |
53 | | |
54 | | There is a Visual Studio Extension to attach child processes automatically. |
55 | | [https://devblogs.microsoft.com/devops/introducing-the-child-process-debugging-power-tool/ Introducing the Child Process Debugging Power Tool] |
56 | | |
57 | | There are two ways to see which process the debugger is currently operating on, and to switch the current process: the Processes window and the Debug Location toolbar. You can open the Processes window using `Debug > Windows > Processes` or `Ctrl+Shift+Alt+P`. You can show the Debug Location toolbar using `View > Toolbars > Debug Location`. |
58 | | |
59 | | Visual Studio will always pause all processes (i.e., you can't pause just one process). Similarly, Visual Studio will always step all processes when using the Step In/Over/Out commands. |
60 | | |
61 | | == Inspecting WebKit2 API types == |
62 | | |
63 | | You can inspect WebKit2 API types in Visual Studio by casting them to their underlying WebKit2 implementation type. For example, say you have a `WKMutableDictionaryRef` that points to address `0x12345678` and want to see what it contains. You can view its contents using the following watch expression (in either the Watch Window or Quick Watch Window): |
64 | | |
65 | | {{{ |
66 | | {,,WebKit}(WebKit::MutableDictionary*)0x12345678 |
67 | | }}} |
68 | | |
69 | | The same technique will work for other WebKit2 API types as long as you substitute the appropriate type for `MutableDictionary` above. |
| 1 | This page was moved to [[https://docs.webkit.org/Build%20%26%20Debug/DebuggingWithVS.html]]. |