ReactOS  0.4.15-dev-1070-ge1a01de
debugging.c
Go to the documentation of this file.
1 /*
2  * Copyright 2011 Alistair Leslie-Hughes
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #define COBJMACROS
20 #include <stdio.h>
21 
22 #include "windows.h"
23 #include "ole2.h"
24 #include "corerror.h"
25 #include "mscoree.h"
26 #include "corhdr.h"
27 
28 #include "wine/test.h"
29 
30 #include "initguid.h"
31 #include "cordebug.h"
32 
34 
35 static HRESULT (WINAPI *pCreateDebuggingInterfaceFromVersion)(int, LPCWSTR, IUnknown **);
36 
37 const WCHAR v2_0[] = {'v','2','.','0','.','5','0','7','2','7',0};
38 
39 static const char *debugstr_guid(REFIID riid)
40 {
41  static char buf[50];
42 
43  if(!riid)
44  return "(null)";
45 
46  sprintf(buf, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
47  riid->Data1, riid->Data2, riid->Data3, riid->Data4[0],
48  riid->Data4[1], riid->Data4[2], riid->Data4[3], riid->Data4[4],
49  riid->Data4[5], riid->Data4[6], riid->Data4[7]);
50 
51  return buf;
52 }
53 
55 {
56  if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ICorDebugManagedCallback2, riid))
57  {
58  *ppv = iface;
59  return S_OK;
60  }
61 
62  ok(0, "unexpected riid (%s)\n", debugstr_guid(riid));
63 
64  *ppv = NULL;
65  return E_NOINTERFACE;
66 }
67 
69 {
70  return 2;
71 }
72 
74 {
75  return 1;
76 }
77 
79  ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
80  ICorDebugFunction *pOldFunction, ICorDebugFunction *pNewFunction,
81  ULONG32 oldILOffset)
82 {
83  ok(0, "unexpected call\n");
84  return E_NOTIMPL;
85 }
86 
88  ICorDebugProcess *pProcess, CONNID dwConnectionId, WCHAR *pConnName)
89 {
90  ok(0, "unexpected call\n");
91  return E_NOTIMPL;
92 }
93 
95  ICorDebugProcess *pProcess, CONNID dwConnectionId)
96 {
97  ok(0, "unexpected call\n");
98  return E_NOTIMPL;
99 }
100 
102  ICorDebugProcess *pProcess, CONNID dwConnectionId)
103 {
104  ok(0, "unexpected call\n");
105  return E_NOTIMPL;
106 }
107 
109  ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
110  ICorDebugFrame *pFrame, ULONG32 nOffset,
111  CorDebugExceptionCallbackType dwEventType, DWORD dwFlags)
112 {
113  ok(0, "unexpected call\n");
114  return E_NOTIMPL;
115 }
116 
118  ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
119  CorDebugExceptionUnwindCallbackType dwEventType, DWORD dwFlags)
120 {
121  ok(0, "unexpected call\n");
122  return E_NOTIMPL;
123 }
124 
126  ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread,
127  ICorDebugFunction *pFunction)
128 {
129  ok(0, "unexpected call\n");
130  return E_NOTIMPL;
131 }
132 
134  ICorDebugController *pController, ICorDebugThread *pThread,
135  ICorDebugMDA *pMDA)
136 {
137  ok(0, "unexpected call\n");
138  return E_NOTIMPL;
139 }
140 
141 static struct ICorDebugManagedCallback2Vtbl managedCallback2Vtbl = {
153 };
154 
156 
158 {
159  if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_ICorDebugManagedCallback, riid))
160  {
161  *ppv = iface;
162  return S_OK;
163  }
164  else if(IsEqualGUID(&IID_ICorDebugManagedCallback2, riid))
165  {
166  *ppv = (void**)&ManagedCallback2;
167  return S_OK;
168  }
169 
170  ok(0, "unexpected riid (%s)\n", debugstr_guid(riid));
171  *ppv = NULL;
172  return E_NOINTERFACE;
173 }
174 
176 {
177  return 2;
178 }
179 
181 {
182  return 1;
183 }
184 
186  ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint)
187 {
188  ok(0, "unexpected call\n");
189  return E_NOTIMPL;
190 }
191 
193  ICorDebugThread *pThread, ICorDebugStepper *pStepper, CorDebugStepReason reason)
194 {
195  ok(0, "unexpected call\n");
196  return E_NOTIMPL;
197 }
198 
201 {
202  ok(0, "unexpected call\n");
203  return E_NOTIMPL;
204 }
205 
207  ICorDebugThread *pThread, BOOL unhandled)
208 {
209  ok(0, "unexpected call\n");
210  return E_NOTIMPL;
211 }
212 
214  ICorDebugThread *pThread, ICorDebugEval *pEval)
215 {
216  ok(0, "unexpected call\n");
217  return E_NOTIMPL;
218 }
219 
221  ICorDebugThread *pThread, ICorDebugEval *pEval)
222 {
223  ok(0, "unexpected call\n");
224  return E_NOTIMPL;
225 }
226 
228 {
229  ok(0, "unexpected call\n");
230  return E_NOTIMPL;
231 }
232 
234 {
235  ok(0, "unexpected call\n");
236  return E_NOTIMPL;
237 }
238 
241 {
242  ok(0, "unexpected call\n");
243  return E_NOTIMPL;
244 }
245 
248 {
249  ok(0, "unexpected call\n");
250  return E_NOTIMPL;
251 }
252 
254  ICorDebugModule *pModule)
255 {
256  ok(0, "unexpected call\n");
257  return E_NOTIMPL;
258 }
259 
261  ICorDebugModule *pModule)
262 {
263  ok(0, "unexpected call\n");
264  return E_NOTIMPL;
265 }
266 
268  ICorDebugClass *c)
269 {
270  ok(0, "unexpected call\n");
271  return E_NOTIMPL;
272 }
273 
275  ICorDebugClass *c)
276 {
277  ok(0, "unexpected call\n");
278  return E_NOTIMPL;
279 }
280 
282  HRESULT errorHR, DWORD errorCode)
283 {
284  ok(0, "unexpected call\n");
285  return E_NOTIMPL;
286 }
287 
289  ICorDebugThread *pThread, LONG lLevel, WCHAR *pLogSwitchName, WCHAR *pMessage)
290 {
291  ok(0, "unexpected call\n");
292  return E_NOTIMPL;
293 }
294 
296  ICorDebugThread *pThread, LONG lLevel, ULONG ulReason,
297  WCHAR *pLogSwitchName, WCHAR *pParentName)
298 {
299  ok(0, "unexpected call\n");
300  return E_NOTIMPL;
301 }
302 
304  ICorDebugAppDomain *pAppDomain)
305 {
306  ok(0, "unexpected call\n");
307  return E_NOTIMPL;
308 }
309 
311  ICorDebugAppDomain *pAppDomain)
312 {
313  ok(0, "unexpected call\n");
314  return E_NOTIMPL;
315 }
316 
318  ICorDebugAssembly *pAssembly)
319 {
320  ok(0, "unexpected call\n");
321  return E_NOTIMPL;
322 }
323 
325  ICorDebugAssembly *pAssembly)
326 {
327  ok(0, "unexpected call\n");
328  return E_NOTIMPL;
329 }
330 
332 {
333  ok(0, "unexpected call\n");
334  return E_NOTIMPL;
335 }
336 
338  ICorDebugThread *pThread)
339 {
340  ok(0, "unexpected call\n");
341  return E_NOTIMPL;
342 }
343 
345  ICorDebugModule *pModule, IStream *pSymbolStream)
346 {
347  ok(0, "unexpected call\n");
348  return E_NOTIMPL;
349 }
350 
352  ICorDebugThread *pThread, ICorDebugFunction *pFunction, BOOL fAccurate)
353 {
354  ok(0, "unexpected call\n");
355  return E_NOTIMPL;
356 }
357 
359  ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint, DWORD dwError)
360 {
361  ok(0, "unexpected call\n");
362  return E_NOTIMPL;
363 }
364 
365 static ICorDebugManagedCallbackVtbl managedCallbackVtbl = {
395 };
396 
398 
400 {
401  hmscoree = LoadLibraryA("mscoree.dll");
402 
403  if (!hmscoree)
404  {
405  win_skip("mscoree.dll not available\n");
406  return FALSE;
407  }
408 
409  pCreateDebuggingInterfaceFromVersion = (void *)GetProcAddress(hmscoree, "CreateDebuggingInterfaceFromVersion");
410 
411  if (!pCreateDebuggingInterfaceFromVersion)
412  {
413  win_skip("functions not available\n");
415  return FALSE;
416  }
417 
418  return TRUE;
419 }
420 
421 #define check_process_enum(core, e) _check_process_enum(__LINE__, core, e)
422 static void _check_process_enum(unsigned line, ICorDebug *pCorDebug, ULONG nExpected)
423 {
424  HRESULT hr;
425  ICorDebugProcessEnum *pProcessEnum = NULL;
426 
427  hr = ICorDebug_EnumerateProcesses(pCorDebug, NULL);
428  ok_(__FILE__,line) (hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr);
429 
430  hr = ICorDebug_EnumerateProcesses(pCorDebug, &pProcessEnum);
431  ok_(__FILE__,line) (hr == S_OK, "expected S_OK got %08x\n", hr);
432  if(hr == S_OK)
433  {
434  ULONG cnt;
435 
436  hr = ICorDebugProcessEnum_GetCount(pProcessEnum, &cnt);
437  ok_(__FILE__,line) (hr == S_OK, "expected S_OK got %08x\n", hr);
438  ok_(__FILE__,line) (cnt == nExpected, "expected %d got %d\n", nExpected, cnt);
439 
440  ICorDebugProcessEnum_Release(pProcessEnum);
441  }
442 }
443 
444 static void test_createDebugger(void)
445 {
446  HRESULT hr;
447  IUnknown *pUnk;
448  ICorDebug *pCorDebug;
449 
450  hr = pCreateDebuggingInterfaceFromVersion(0, v2_0, &pUnk);
451  ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
452 
453  hr = pCreateDebuggingInterfaceFromVersion(1, v2_0, &pUnk);
454  ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
455 
456  hr = pCreateDebuggingInterfaceFromVersion(2, v2_0, &pUnk);
457  ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
458 
459  hr = pCreateDebuggingInterfaceFromVersion(4, v2_0, &pUnk);
460  ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
461 
462  hr = pCreateDebuggingInterfaceFromVersion(3, v2_0, NULL);
463  ok(hr == E_INVALIDARG, "CreateDebuggingInterfaceFromVersion returned %08x\n", hr);
464 
465  hr = pCreateDebuggingInterfaceFromVersion(3, v2_0, &pUnk);
466  if(hr == S_OK)
467  {
468  hr = IUnknown_QueryInterface(pUnk, &IID_ICorDebug, (void**)&pCorDebug);
469  ok(hr == S_OK, "expected S_OK got %08x\n", hr);
470  if(hr == S_OK)
471  {
472  hr = ICorDebug_Initialize(pCorDebug);
473  ok(hr == S_OK, "expected S_OK got %08x\n", hr);
474  if(hr == S_OK)
475  {
476  hr = ICorDebug_SetManagedHandler(pCorDebug, NULL);
477  ok(hr == E_INVALIDARG, "expected E_INVALIDARG got %08x\n", hr);
478 
479  hr = ICorDebug_SetManagedHandler(pCorDebug, &ManagedCallback);
480  ok(hr == S_OK, "expected S_OK got %08x\n", hr);
481 
482  /* We should have no processes */
483  check_process_enum(pCorDebug, 0);
484  }
485 
486  ICorDebug_Release(pCorDebug);
487  }
488  IUnknown_Release(pUnk);
489  }
490  else
491  {
492  skip(".NET 2.0 or mono not installed.\n");
493  }
494 }
495 
496 START_TEST(debugging)
497 {
499 
500  if (!init_functionpointers())
501  return;
502 
504 
506  CoUninitialize();
507 }
static void test_createDebugger(void)
Definition: debugging.c:444
static HRESULT WINAPI ManagedCallback_LogSwitch(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, LONG lLevel, ULONG ulReason, WCHAR *pLogSwitchName, WCHAR *pParentName)
Definition: debugging.c:295
static LPCWSTR
Definition: debugging.c:35
static HRESULT WINAPI ManagedCallback_CreateAppDomain(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, ICorDebugAppDomain *pAppDomain)
Definition: debugging.c:303
#define REFIID
Definition: guiddef.h:118
#define E_NOINTERFACE
Definition: winerror.h:2364
static HRESULT WINAPI ManagedCallback_Exception(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, BOOL unhandled)
Definition: debugging.c:206
unsigned int ULONG32
Definition: basetsd.h:125
static HRESULT WINAPI ManagedCallback_LoadAssembly(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugAssembly *pAssembly)
Definition: debugging.c:317
static HRESULT WINAPI ManagedCallback_ExitThread(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:246
static HRESULT WINAPI ManagedCallback_StepComplete(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugStepper *pStepper, CorDebugStepReason reason)
Definition: debugging.c:192
HRESULT hr
Definition: shlfolder.c:183
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
static ULONG WINAPI ManagedCallback_Release(ICorDebugManagedCallback *iface)
Definition: debugging.c:180
#define TRUE
Definition: types.h:120
REFIID riid
Definition: precomp.h:44
static HRESULT WINAPI ManagedCallback_UnloadClass(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugClass *c)
Definition: debugging.c:274
static HRESULT WINAPI ManagedCallback2_FunctionRemapComplete(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pFunction)
Definition: debugging.c:125
DWORD CONNID
Definition: cordebug.idl:94
REFIID LPVOID * ppv
Definition: atlbase.h:39
static HRESULT WINAPI ManagedCallback2_ExceptionUnwind(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, CorDebugExceptionUnwindCallbackType dwEventType, DWORD dwFlags)
Definition: debugging.c:117
static HRESULT WINAPI ManagedCallback_ControlCTrap(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:331
static HRESULT WINAPI ManagedCallback_LogMessage(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, LONG lLevel, WCHAR *pLogSwitchName, WCHAR *pMessage)
Definition: debugging.c:288
static BOOL init_functionpointers(void)
Definition: debugging.c:399
static ICorDebugManagedCallback2 ManagedCallback2
Definition: debugging.c:155
static HRESULT WINAPI ManagedCallback_LoadModule(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule)
Definition: debugging.c:253
#define sprintf(buf, format,...)
Definition: sprintf.c:55
static HRESULT WINAPI ManagedCallback_UnloadModule(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule)
Definition: debugging.c:260
static HRESULT WINAPI ManagedCallback_EditAndContinueRemap(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pFunction, BOOL fAccurate)
Definition: debugging.c:351
#define FALSE
Definition: types.h:117
static HRESULT WINAPI ManagedCallback_Break(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:199
static ULONG WINAPI ManagedCallback2_AddRef(ICorDebugManagedCallback2 *iface)
Definition: debugging.c:68
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI ManagedCallback_QueryInterface(ICorDebugManagedCallback *iface, REFIID riid, void **ppv)
Definition: debugging.c:157
static void _check_process_enum(unsigned line, ICorDebug *pCorDebug, ULONG nExpected)
Definition: debugging.c:422
Definition: parser.c:48
static HRESULT WINAPI ManagedCallback_ExitProcess(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:233
static HRESULT WINAPI ManagedCallback_CreateProcess(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess)
Definition: debugging.c:227
static HRESULT WINAPI ManagedCallback2_ChangeConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId)
Definition: debugging.c:94
#define FreeLibrary(x)
Definition: compat.h:496
static HRESULT WINAPI ManagedCallback_BreakpointSetError(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint, DWORD dwError)
Definition: debugging.c:358
static const char * debugstr_guid(REFIID riid)
Definition: debugging.c:39
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:79
const GUID IID_IUnknown
static HRESULT WINAPI ManagedCallback2_MDANotification(ICorDebugManagedCallback2 *iface, ICorDebugController *pController, ICorDebugThread *pThread, ICorDebugMDA *pMDA)
Definition: debugging.c:133
#define WINAPI
Definition: msvc.h:6
const GLubyte * c
Definition: glext.h:8905
unsigned long DWORD
Definition: ntddk_ex.h:95
static HANDLE thread
Definition: service.c:33
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
static HRESULT(WINAPI *pCreateDebuggingInterfaceFromVersion)(int
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static HMODULE hmscoree
Definition: debugging.c:33
static HRESULT WINAPI ManagedCallback_Breakpoint(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugBreakpoint *pBreakpoint)
Definition: debugging.c:185
static HRESULT WINAPI ManagedCallback2_QueryInterface(ICorDebugManagedCallback2 *iface, REFIID riid, void **ppv)
Definition: debugging.c:54
static HRESULT WINAPI ManagedCallback_ExitAppDomain(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, ICorDebugAppDomain *pAppDomain)
Definition: debugging.c:310
#define check_process_enum(core, e)
Definition: debugging.c:421
static HRESULT WINAPI ManagedCallback2_CreateConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId, WCHAR *pConnName)
Definition: debugging.c:87
static HRESULT WINAPI ManagedCallback_EvalComplete(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugEval *pEval)
Definition: debugging.c:213
static HRESULT WINAPI ManagedCallback_UnloadAssembly(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugAssembly *pAssembly)
Definition: debugging.c:324
static HRESULT WINAPI ManagedCallback2_FunctionRemapOpportunity(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFunction *pOldFunction, ICorDebugFunction *pNewFunction, ULONG32 oldILOffset)
Definition: debugging.c:78
#define S_OK
Definition: intsafe.h:51
static ICorDebugManagedCallback ManagedCallback
Definition: debugging.c:397
static IUnknown **const WCHAR v2_0[]
Definition: debugging.c:37
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
#define ok(value,...)
Definition: atltest.h:57
#define E_NOTIMPL
Definition: ddrawi.h:99
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4112
static HRESULT WINAPI ManagedCallback_NameChange(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread)
Definition: debugging.c:337
#define skip(...)
Definition: atltest.h:64
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
static HRESULT WINAPI ManagedCallback_DebuggerError(ICorDebugManagedCallback *iface, ICorDebugProcess *pProcess, HRESULT errorHR, DWORD errorCode)
Definition: debugging.c:281
static HRESULT WINAPI ManagedCallback2_DestroyConnection(ICorDebugManagedCallback2 *iface, ICorDebugProcess *pProcess, CONNID dwConnectionId)
Definition: debugging.c:101
static HRESULT WINAPI ManagedCallback_CreateThread(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *thread)
Definition: debugging.c:239
static HRESULT WINAPI ManagedCallback_EvalException(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugEval *pEval)
Definition: debugging.c:220
unsigned int ULONG
Definition: retypes.h:1
START_TEST(debugging)
Definition: debugging.c:496
static ULONG WINAPI ManagedCallback2_Release(ICorDebugManagedCallback2 *iface)
Definition: debugging.c:73
static HRESULT WINAPI ManagedCallback_LoadClass(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugClass *c)
Definition: debugging.c:267
static ICorDebugManagedCallbackVtbl managedCallbackVtbl
Definition: debugging.c:365
#define GetProcAddress(x, y)
Definition: compat.h:501
static ULONG WINAPI ManagedCallback_AddRef(ICorDebugManagedCallback *iface)
Definition: debugging.c:175
static HRESULT WINAPI ManagedCallback_UpdateModuleSymbols(ICorDebugManagedCallback *iface, ICorDebugAppDomain *pAppDomain, ICorDebugModule *pModule, IStream *pSymbolStream)
Definition: debugging.c:344
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#define win_skip
Definition: test.h:149
static HRESULT WINAPI ManagedCallback2_Exception(ICorDebugManagedCallback2 *iface, ICorDebugAppDomain *pAppDomain, ICorDebugThread *pThread, ICorDebugFrame *pFrame, ULONG32 nOffset, CorDebugExceptionCallbackType dwEventType, DWORD dwFlags)
Definition: debugging.c:108
#define ok_(x1, x2)
Definition: atltest.h:61
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static struct ICorDebugManagedCallback2Vtbl managedCallback2Vtbl
Definition: debugging.c:141