⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changes between Version 8 and Version 9 of Debugging With Visual Studio


Ignore:
Timestamp:
Mar 2, 2014, 5:44:49 PM (13 years ago)
Author:
BJ Burg
Comment:

restructure sections into wk1/wk2/test runners/misc.

Legend:

Unmodified
Added
Removed
Modified
  • Debugging With Visual Studio

    v8 v9  
    1 = Using the Microsoft and Safari Symbol Servers =
    2 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.
     1= Debugging WebKit =
    32
    4 = Watch Window =
    5 You can open any of the Watch windows using the `Debug > Windows > Watch` submenu.
     31. Open `Source/WebKit/WebKit.vcxproj/WebKit.sln` using Visual Studio 2013 or Visual Studio Express (Desktop) 2013 or later.
    64
    7 [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.
     5If you get errors about not being able to find `.props` files, run `Tools/Scripts/update-webkit`, then close and relaunch Cygwin and Visual Studio or Visual Studio Express.
    86
    9 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.
     72. Set `WinLauncher` as the solution's `StartUp` project.
    108
    11 = Calling CFShow =
    12 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:
    13 {{{
    14 {,,CoreFoundation}CFShow((void*)0x12345678)
    15 }}}
     9Select the `WinLauncher` project in the Solution Explorer, then choose `Project > Set as StartUp Project`. This will cause the project to turn bold in the Solution Explorer.
    1610
    17 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.
     113. Launch the debugger
    1812
    19 = Debugging Multi-Process Applications =
     13Choose `Debug > Start Debugging`.
     14
     15= Debugging DumpRenderTree =
     16
     171. Set `DumpRenderTreeLauncher` as your startup project.
     18
     192. Set the layout test as a command argument.
     20
     21In `DumpRenderTreeLauncher`'s properties, go to `Configuration Properties > Debugging` and set the `Command Arguments` field to the full path of the layout test you want to debug.
     22
     233. Launch the debugger.
     24
     25= Debugging WebKit2 / WebKitTestRunner =
     26
    2027You 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.
    2128
    … …  
    2431Visual 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.
    2532
    26 = Inspecting WebKit2 API types =
     33= Miscellaneous Tips =
     34
     35== Using the Microsoft and Safari Symbol Servers ==
     36Follow 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.
     37
     38== Using Watch Window ==
     39You can open any of the Watch windows using the `Debug > Windows > Watch` submenu.
     40
     41[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.
     42
     43 * 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.
     44
     45== Calling CFShow ==
     46
     47When 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:
     48{{{
     49{,,CoreFoundation}CFShow((void*)0x12345678)
     50}}}
     51
     52Note 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.
     53
     54== Inspecting WebKit2 API types ==
    2755
    2856You 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):