| 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]]. |