1/* 2 * Copyright (C) 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 19import "unknwn.idl"; 20import "objidl.idl"; 21 22cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") 23cpp_quote("#undef CreateProcess") 24cpp_quote("#endif") 25 26interface ICorDebugAppDomain; 27interface ICorDebugAppDomainEnum; 28interface ICorDebugAssembly; 29interface ICorDebugAssemblyEnum; 30interface ICorDebugBreakpoint; 31interface ICorDebugBreakpointEnum; 32interface ICorDebugChain; 33interface ICorDebugChainEnum; 34interface ICorDebugClass; 35interface ICorDebugCode; 36interface ICorDebugContext; 37interface ICorDebugEditAndContinueSnapshot; 38interface ICorDebugEditAndContinueErrorInfo; 39interface ICorDebugEnum; 40interface ICorDebugErrorInfoEnum; 41interface ICorDebugEval; 42interface ICorDebugFrame; 43interface ICorDebugFrameEnum; 44interface ICorDebugFunction; 45interface ICorDebugFunctionBreakpoint; 46interface ICorDebugManagedCallback; 47interface ICorDebugManagedCallback2; 48interface ICorDebugMDA; 49interface ICorDebugModule; 50interface ICorDebugModuleBreakpoint; 51interface ICorDebugModuleEnum; 52interface ICorDebugObjectEnum; 53interface ICorDebugObjectValue; 54interface ICorDebugProcess; 55interface ICorDebugProcessEnum; 56interface ICorDebugRegisterSet; 57interface ICorDebugStepper; 58interface ICorDebugStepperEnum; 59interface ICorDebugThreadEnum; 60interface ICorDebugUnmanagedCallback; 61interface ICorDebugValue; 62interface ICorDebugValueBreakpoint; 63 64 65typedef [wire_marshal(unsigned long)] void *HPROCESS; 66typedef [wire_marshal(unsigned long)] void *HTHREAD; 67 68/* These are defined in corhrd.idl but used here. */ 69cpp_quote("#if 0") 70 71typedef UINT32 mdToken; 72typedef mdToken mdModule; 73typedef SIZE_T mdScope; 74typedef mdToken mdTypeDef; 75typedef mdToken mdSourceFile; 76typedef mdToken mdMemberRef; 77typedef mdToken mdMethodDef; 78typedef mdToken mdFieldDef; 79typedef mdToken mdSignature; 80typedef ULONG CorElementType; 81typedef SIZE_T PCCOR_SIGNATURE; 82 83typedef SIZE_T LPDEBUG_EVENT; 84 85typedef SIZE_T LPSTARTUPINFOW; 86typedef SIZE_T LPPROCESS_INFORMATION; 87 88cpp_quote("#endif") 89 90typedef ULONG64 CORDB_ADDRESS; 91typedef ULONG64 CORDB_REGISTER; 92 93typedef UINT64 TASKID; 94typedef DWORD CONNID; 95 96 97cpp_quote("#ifndef _COR_IL_MAP") 98cpp_quote("#define _COR_IL_MAP") 99 100typedef struct _COR_IL_MAP 101{ 102 ULONG32 oldOffset; 103 ULONG32 newOffset; 104 BOOL fAccurate; 105} COR_IL_MAP; 106 107cpp_quote("#endif /* _COR_IL_MAP */") 108 109cpp_quote("#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_") 110cpp_quote("#define _COR_DEBUG_IL_TO_NATIVE_MAP_") 111 112typedef enum CorDebugIlToNativeMappingTypes 113{ 114 NO_MAPPING = -1, 115 PROLOG = -2, 116 EPILOG = -3 117} CorDebugIlToNativeMappingTypes; 118 119typedef struct COR_DEBUG_IL_TO_NATIVE_MAP 120{ 121 ULONG32 ilOffset; 122 ULONG32 nativeStartOffset; 123 ULONG32 nativeEndOffset; 124} COR_DEBUG_IL_TO_NATIVE_MAP; 125 126cpp_quote("#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */") 127 128 129typedef enum CorDebugThreadState 130{ 131 THREAD_RUN, 132 THREAD_SUSPEND 133} CorDebugThreadState; 134 135typedef enum CorDebugCreateProcessFlags 136{ 137 DEBUG_NO_SPECIAL_OPTIONS = 0x0000 138} CorDebugCreateProcessFlags; 139 140[ 141 object, 142 local, 143 uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D), 144 pointer_default(unique) 145] 146interface ICorDebugValue : IUnknown 147{ 148 HRESULT GetType([out] CorElementType *pType); 149 HRESULT GetSize([out] ULONG32 *pSize); 150 HRESULT GetAddress([out] CORDB_ADDRESS *pAddress); 151 HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint); 152}; 153 154[ 155 object, 156 local, 157 uuid(938c6d66-7fb6-4f69-b389-425b8987329b), 158 pointer_default(unique) 159] 160interface ICorDebugThread : IUnknown 161{ 162 HRESULT GetProcess([out] ICorDebugProcess **ppProcess); 163 HRESULT GetID([out] DWORD *pdwThreadId); 164 HRESULT GetHandle([out] HTHREAD *phThreadHandle); 165 HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain); 166 HRESULT SetDebugState([in] CorDebugThreadState state); 167 HRESULT GetDebugState([out] CorDebugThreadState *pState); 168 169 typedef enum CorDebugUserState 170 { 171 USER_STOP_REQUESTED = 0x01, 172 USER_SUSPEND_REQUESTED = 0x02, 173 USER_BACKGROUND = 0x04, 174 USER_UNSTARTED = 0x08, 175 USER_STOPPED = 0x10, 176 USER_WAIT_SLEEP_JOIN = 0x20, 177 USER_SUSPENDED = 0x40, 178 179 USER_UNSAFE_POINT = 0x80, 180 } CorDebugUserState; 181 182 HRESULT GetUserState([out] CorDebugUserState *pState); 183 HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject); 184 HRESULT ClearCurrentException(); 185 HRESULT CreateStepper([out] ICorDebugStepper **ppStepper); 186 HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains); 187 HRESULT GetActiveChain([out] ICorDebugChain **ppChain); 188 HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame); 189 HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters); 190 HRESULT CreateEval([out] ICorDebugEval **ppEval); 191 HRESULT GetObject([out] ICorDebugValue **ppObject); 192}; 193 194[ 195 object, 196 local, 197 uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef), 198 pointer_default(unique) 199] 200 201interface ICorDebugController : IUnknown 202{ 203 HRESULT Stop([in] DWORD dwTimeoutIgnored); 204 HRESULT Continue([in] BOOL fIsOutOfBand); 205 HRESULT IsRunning([out] BOOL *pbRunning); 206 HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread, 207 [out] BOOL *pbQueued); 208 HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads); 209 HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state, 210 [in] ICorDebugThread *pExceptThisThread); 211 HRESULT Detach(); 212 HRESULT Terminate([in] UINT exitCode); 213 HRESULT CanCommitChanges([in] ULONG cSnapshots, 214 [in] ICorDebugEditAndContinueSnapshot *pSnapshots[], 215 [out] ICorDebugErrorInfoEnum **pError); 216 HRESULT CommitChanges([in] ULONG cSnapshots, 217 [in] ICorDebugEditAndContinueSnapshot *pSnapshots[], 218 [out] ICorDebugErrorInfoEnum **pError); 219}; 220 221[ 222 object, 223 local, 224 uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef), 225 pointer_default(unique) 226] 227interface ICorDebugProcess : ICorDebugController 228{ 229 HRESULT GetID([out] DWORD *pdwProcessId); 230 HRESULT GetHandle([out] HPROCESS *phProcessHandle); 231 HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread); 232 HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects); 233 HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub); 234 HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended); 235 HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, 236 [in, out] BYTE context[]); 237 HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]); 238 HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read); 239 HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written); 240 HRESULT ClearCurrentException([in] DWORD threadID); 241 HRESULT EnableLogMessages([in]BOOL fOnOff); 242 HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName, 243 [in]LONG lLevel); 244 HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains); 245 HRESULT GetObject([out] ICorDebugValue **ppObject); 246 HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread); 247 HRESULT GetHelperThreadID([out] DWORD *pThreadID); 248}; 249 250[ 251 object, 252 local, 253 uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef), 254 pointer_default(unique) 255] 256interface ICorDebugAppDomain : ICorDebugController 257{ 258 HRESULT GetProcess([out] ICorDebugProcess **ppProcess); 259 HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies); 260 HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData, 261 [out] ICorDebugModule **ppModule); 262 HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints); 263 HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers); 264 HRESULT IsAttached([out] BOOL *pbAttached); 265 HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); 266 HRESULT GetObject([out] ICorDebugValue **ppObject); 267 HRESULT Attach(); 268 HRESULT GetID([out] ULONG32 *pId); 269}; 270 271[ 272 object, 273 local, 274 uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef), 275 pointer_default(unique) 276] 277interface ICorDebugManagedCallback : IUnknown 278{ 279 HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain, 280 [in] ICorDebugThread *pThread, 281 [in] ICorDebugBreakpoint *pBreakpoint); 282 283 typedef enum CorDebugStepReason 284 { 285 STEP_NORMAL, 286 STEP_RETURN, 287 STEP_CALL, 288 STEP_EXCEPTION_FILTER, 289 STEP_EXCEPTION_HANDLER, 290 STEP_INTERCEPT, 291 STEP_EXIT 292 } CorDebugStepReason; 293 294 HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 295 [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason); 296 HRESULT Break([in] ICorDebugAppDomain *pAppDomain, 297 [in] ICorDebugThread *thread); 298 HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 299 [in] BOOL unhandled); 300 HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 301 [in] ICorDebugEval *pEval); 302 HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 303 [in] ICorDebugEval *pEval); 304 HRESULT CreateProcess([in] ICorDebugProcess *pProcess); 305 HRESULT ExitProcess([in] ICorDebugProcess *pProcess); 306 HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread); 307 HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread); 308 HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule); 309 HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule); 310 HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c); 311 HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c); 312 HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR, 313 [in] DWORD errorCode); 314 315 typedef enum LoggingLevelEnum 316 { 317 LTraceLevel0 = 0, 318 LTraceLevel1, 319 LTraceLevel2, 320 LTraceLevel3, 321 LTraceLevel4, 322 LStatusLevel0 = 20, 323 LStatusLevel1, 324 LStatusLevel2, 325 LStatusLevel3, 326 LStatusLevel4, 327 LWarningLevel = 40, 328 LErrorLevel = 50, 329 LPanicLevel = 100 330 } LoggingLevelEnum; 331 332 typedef enum LogSwitchCallReason 333 { 334 SWITCH_CREATE, 335 SWITCH_MODIFY, 336 SWITCH_DELETE 337 } LogSwitchCallReason; 338 339 HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 340 [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage); 341 HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 342 [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName, 343 [in] WCHAR *pParentName); 344 HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain); 345 HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain); 346 HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly); 347 HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly); 348 HRESULT ControlCTrap([in] ICorDebugProcess *pProcess); 349 HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread); 350 HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule, 351 [in] IStream *pSymbolStream); 352 HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 353 [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate); 354 355 HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 356 [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError); 357}; 358 359[ 360 object, 361 local, 362 uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203), 363 pointer_default(unique) 364] 365interface ICorDebugManagedCallback2 : IUnknown 366{ 367 HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain, 368 [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction, 369 [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset); 370 371 HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId, 372 [in] WCHAR *pConnName); 373 374 HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId ); 375 376 HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId ); 377 378 379 typedef enum CorDebugExceptionCallbackType 380 { 381 DEBUG_EXCEPTION_FIRST_CHANCE = 1, 382 DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2, 383 DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3, 384 DEBUG_EXCEPTION_UNHANDLED = 4 385 } CorDebugExceptionCallbackType; 386 387 typedef enum CorDebugExceptionFlags 388 { 389 DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001 390 } CorDebugExceptionFlags; 391 392 HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 393 [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset, 394 [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags ); 395 396 typedef enum CorDebugExceptionUnwindCallbackType 397 { 398 DEBUG_EXCEPTION_UNWIND_BEGIN = 1, 399 DEBUG_EXCEPTION_INTERCEPTED = 2 400 } CorDebugExceptionUnwindCallbackType; 401 402 HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread, 403 [in] CorDebugExceptionUnwindCallbackType dwEventType, 404 [in] DWORD dwFlags ); 405 406 HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain, 407 [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction); 408 409 HRESULT MDANotification([in] ICorDebugController * pController, 410 [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA 411 ); 412 413}; 414[ 415 object, 416 local, 417 uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef), 418 pointer_default(unique) 419] 420interface ICorDebug : IUnknown 421{ 422 HRESULT Initialize(); 423 HRESULT Terminate(); 424 HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback); 425 HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback); 426 HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine, 427 [in] LPSECURITY_ATTRIBUTES lpProcessAttributes, 428 [in] LPSECURITY_ATTRIBUTES lpThreadAttributes, 429 [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, 430 [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory, 431 [in] LPSTARTUPINFOW lpStartupInfo, 432 [in] LPPROCESS_INFORMATION lpProcessInformation, 433 [in] CorDebugCreateProcessFlags debuggingFlags, 434 [out] ICorDebugProcess **ppProcess); 435 436 HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach, 437 [out] ICorDebugProcess **ppProcess); 438 HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess); 439 HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess); 440 HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled); 441}; 442 443 444[ 445 object, 446 local, 447 uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D), 448 pointer_default(unique) 449] 450interface ICorDebugBreakpoint : IUnknown 451{ 452 HRESULT Activate([in] BOOL bActive); 453 HRESULT IsActive([out] BOOL *pbActive); 454}; 455 456[ 457 object, 458 local, 459 uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D), 460 pointer_default(unique) 461] 462interface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint 463{ 464 HRESULT GetFunction([out] ICorDebugFunction **ppFunction); 465 HRESULT GetOffset([out] ULONG32 *pnOffset); 466}; 467 468[ 469 object, 470 local, 471 uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D), 472 pointer_default(unique) 473] 474interface ICorDebugModuleBreakpoint : ICorDebugBreakpoint 475{ 476 HRESULT GetModule([out] ICorDebugModule **ppModule); 477}; 478 479[ 480 object, 481 local, 482 uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D), 483 pointer_default(unique) 484] 485interface ICorDebugValueBreakpoint : ICorDebugBreakpoint 486{ 487 HRESULT GetValue([out] ICorDebugValue **ppValue); 488}; 489 490[ 491 object, 492 local, 493 uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D), 494 pointer_default(unique) 495] 496interface ICorDebugStepper : IUnknown 497{ 498 HRESULT IsActive([out] BOOL *pbActive); 499 HRESULT Deactivate(); 500 501 typedef enum CorDebugIntercept 502 { 503 INTERCEPT_NONE = 0x0 , 504 INTERCEPT_CLASS_INIT = 0x01, 505 INTERCEPT_EXCEPTION_FILTER = 0x02, 506 INTERCEPT_SECURITY = 0x04, 507 INTERCEPT_CONTEXT_POLICY = 0x08, 508 INTERCEPT_INTERCEPTION = 0x10, 509 INTERCEPT_ALL = 0xffff 510 } CorDebugIntercept; 511 512 HRESULT SetInterceptMask([in] CorDebugIntercept mask); 513 514 typedef enum CorDebugUnmappedStop 515 { 516 STOP_NONE = 0x0, 517 STOP_PROLOG = 0x01, 518 STOP_EPILOG = 0x02, 519 STOP_NO_MAPPING_INFO = 0x04, 520 STOP_OTHER_UNMAPPED = 0x08, 521 STOP_UNMANAGED = 0x10, 522 523 STOP_ALL = 0xffff, 524 525 } CorDebugUnmappedStop; 526 527 HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask); 528 HRESULT Step([in] BOOL bStepIn); 529 530 typedef struct COR_DEBUG_STEP_RANGE 531 { 532 ULONG32 startOffset, endOffset; 533 } COR_DEBUG_STEP_RANGE; 534 535 HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount); 536 HRESULT StepOut(); 537 HRESULT SetRangeIL([in] BOOL bIL); 538}; 539 540[ 541 object, 542 local, 543 uuid(CC7BCB01-8A68-11d2-983C-0000F808342D), 544 pointer_default(unique) 545] 546interface ICorDebugEnum : IUnknown 547{ 548 HRESULT Skip([in] ULONG celt); 549 HRESULT Reset(); 550 HRESULT Clone([out] ICorDebugEnum **ppEnum); 551 HRESULT GetCount([out] ULONG *pcelt); 552}; 553 554[ 555 object, 556 local, 557 uuid(63ca1b24-4359-4883-bd57-13f815f58744), 558 pointer_default(unique) 559] 560 561interface ICorDebugAppDomainEnum : ICorDebugEnum 562{ 563 HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched); 564 565}; 566 567[ 568 object, 569 local, 570 uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83), 571 pointer_default(unique) 572] 573interface ICorDebugAssemblyEnum : ICorDebugEnum 574{ 575 HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched); 576 577}; 578 579[ 580 object, 581 local, 582 uuid(CC7BCB03-8A68-11d2-983C-0000F808342D), 583 pointer_default(unique) 584] 585interface ICorDebugBreakpointEnum : ICorDebugEnum 586{ 587 HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched); 588}; 589 590[ 591 object, 592 local, 593 uuid(CC7BCB08-8A68-11d2-983C-0000F808342D), 594 pointer_default(unique) 595] 596interface ICorDebugChainEnum : ICorDebugEnum 597{ 598 HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched); 599}; 600 601[ 602 object, 603 local, 604 uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C), 605 pointer_default(unique) 606] 607interface ICorDebugErrorInfoEnum : ICorDebugEnum 608{ 609 HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[], 610 [out] ULONG *pceltFetched); 611}; 612 613[ 614 object, 615 local, 616 uuid(CC7BCB07-8A68-11d2-983C-0000F808342D), 617 pointer_default(unique) 618] 619interface ICorDebugFrameEnum : ICorDebugEnum 620{ 621 HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched); 622}; 623 624[ 625 object, 626 local, 627 uuid(CC7BCB09-8A68-11d2-983C-0000F808342D), 628 pointer_default(unique) 629] 630interface ICorDebugModuleEnum : ICorDebugEnum 631{ 632 HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched); 633}; 634 635[ 636 object, 637 local, 638 uuid(CC7BCB02-8A68-11d2-983C-0000F808342D), 639 pointer_default(unique) 640] 641interface ICorDebugObjectEnum : ICorDebugEnum 642{ 643 HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched); 644}; 645 646[ 647 object, 648 local, 649 uuid(CC7BCB05-8A68-11d2-983C-0000F808342D), 650 pointer_default(unique) 651] 652interface ICorDebugProcessEnum : ICorDebugEnum 653{ 654 HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched); 655}; 656 657[ 658 object, 659 local, 660 uuid(CC7BCB04-8A68-11d2-983C-0000F808342D), 661 pointer_default(unique) 662] 663interface ICorDebugStepperEnum : ICorDebugEnum 664{ 665 HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched); 666}; 667 668[ 669 object, 670 local, 671 uuid(CC7BCB06-8A68-11d2-983C-0000F808342D), 672 pointer_default(unique) 673] 674interface ICorDebugThreadEnum : ICorDebugEnum 675{ 676 HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched); 677}; 678 679[ 680 object, 681 local, 682 uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D), 683 pointer_default(unique) 684] 685interface ICorDebugChain : IUnknown 686{ 687 HRESULT GetThread([out] ICorDebugThread **ppThread); 688 HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd); 689 HRESULT GetContext([out] ICorDebugContext **ppContext); 690 HRESULT GetCaller([out] ICorDebugChain **ppChain); 691 HRESULT GetCallee([out] ICorDebugChain **ppChain); 692 HRESULT GetPrevious([out] ICorDebugChain **ppChain); 693 HRESULT GetNext([out] ICorDebugChain **ppChain); 694 HRESULT IsManaged([out] BOOL *pManaged); 695 HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames); 696 HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame); 697 HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters); 698 typedef enum CorDebugChainReason 699 { 700 CHAIN_NONE = 0x000, 701 CHAIN_CLASS_INIT = 0x001, 702 CHAIN_EXCEPTION_FILTER = 0x002, 703 CHAIN_SECURITY = 0x004, 704 CHAIN_CONTEXT_POLICY = 0x008, 705 CHAIN_INTERCEPTION = 0x010, 706 CHAIN_PROCESS_START = 0x020, 707 CHAIN_THREAD_START = 0x040, 708 CHAIN_ENTER_MANAGED = 0x080, 709 CHAIN_ENTER_UNMANAGED = 0x100, 710 CHAIN_DEBUGGER_EVAL = 0x200, 711 CHAIN_CONTEXT_SWITCH = 0x400, 712 CHAIN_FUNC_EVAL = 0x800, 713 } CorDebugChainReason; 714 715 HRESULT GetReason([out] CorDebugChainReason *pReason); 716}; 717 718[ 719 object, 720 local, 721 uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D), 722 pointer_default(unique) 723] 724interface ICorDebugFrame : IUnknown 725{ 726 HRESULT GetChain([out] ICorDebugChain **ppChain); 727 HRESULT GetCode([out] ICorDebugCode **ppCode); 728 HRESULT GetFunction([out] ICorDebugFunction **ppFunction); 729 HRESULT GetFunctionToken([out] mdMethodDef *pToken); 730 HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd); 731 HRESULT GetCaller([out] ICorDebugFrame **ppFrame); 732 HRESULT GetCallee([out] ICorDebugFrame **ppFrame); 733 HRESULT CreateStepper([out] ICorDebugStepper **ppStepper); 734}; 735 736 737[ 738 object, 739 local, 740 uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D), 741 pointer_default(unique) 742] 743interface ICorDebugRegisterSet : IUnknown 744{ 745 typedef enum CorDebugRegister 746 { 747 REGISTER_INSTRUCTION_POINTER = 0, 748 REGISTER_STACK_POINTER, 749 REGISTER_FRAME_POINTER, 750 751 REGISTER_X86_EIP = 0, 752 REGISTER_X86_ESP, 753 REGISTER_X86_EBP, 754 755 REGISTER_X86_EAX, 756 REGISTER_X86_ECX, 757 REGISTER_X86_EDX, 758 REGISTER_X86_EBX, 759 760 REGISTER_X86_ESI, 761 REGISTER_X86_EDI, 762 763 REGISTER_X86_FPSTACK_0, 764 REGISTER_X86_FPSTACK_1, 765 REGISTER_X86_FPSTACK_2, 766 REGISTER_X86_FPSTACK_3, 767 REGISTER_X86_FPSTACK_4, 768 REGISTER_X86_FPSTACK_5, 769 REGISTER_X86_FPSTACK_6, 770 REGISTER_X86_FPSTACK_7, 771 772 REGISTER_AMD64_RIP = 0, 773 REGISTER_AMD64_RSP, 774 REGISTER_AMD64_RBP, 775 776 REGISTER_AMD64_RAX, 777 REGISTER_AMD64_RCX, 778 REGISTER_AMD64_RDX, 779 REGISTER_AMD64_RBX, 780 781 REGISTER_AMD64_RSI, 782 REGISTER_AMD64_RDI, 783 784 REGISTER_AMD64_R8, 785 REGISTER_AMD64_R9, 786 REGISTER_AMD64_R10, 787 REGISTER_AMD64_R11, 788 REGISTER_AMD64_R12, 789 REGISTER_AMD64_R13, 790 REGISTER_AMD64_R14, 791 REGISTER_AMD64_R15, 792 793 REGISTER_AMD64_XMM0, 794 REGISTER_AMD64_XMM1, 795 REGISTER_AMD64_XMM2, 796 REGISTER_AMD64_XMM3, 797 REGISTER_AMD64_XMM4, 798 REGISTER_AMD64_XMM5, 799 REGISTER_AMD64_XMM6, 800 REGISTER_AMD64_XMM7, 801 REGISTER_AMD64_XMM8, 802 REGISTER_AMD64_XMM9, 803 REGISTER_AMD64_XMM10, 804 REGISTER_AMD64_XMM11, 805 REGISTER_AMD64_XMM12, 806 REGISTER_AMD64_XMM13, 807 REGISTER_AMD64_XMM14, 808 REGISTER_AMD64_XMM15, 809 810 REGISTER_IA64_BSP = REGISTER_FRAME_POINTER, 811 812 REGISTER_IA64_R0 = REGISTER_IA64_BSP + 1, 813 REGISTER_IA64_F0 = REGISTER_IA64_R0 + 128, 814 815 } CorDebugRegister; 816 817 HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable); 818 819 HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount, 820 [out] CORDB_REGISTER regBuffer[]); 821 HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount, 822 [in] CORDB_REGISTER regBuffer[]); 823 HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]); 824 HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]); 825} 826 827[ 828 object, 829 local, 830 uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D), 831 pointer_default(unique) 832] 833interface ICorDebugEval : IUnknown 834{ 835 HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs, 836 [in] ICorDebugValue *ppArgs[]); 837 HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs, 838 [in] ICorDebugValue *ppArgs[]); 839 HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass); 840 HRESULT NewString([in] LPCWSTR string); 841 HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass, 842 [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]); 843 HRESULT IsActive([out] BOOL *pbActive); 844 HRESULT Abort(); 845 HRESULT GetResult([out] ICorDebugValue **ppResult); 846 HRESULT GetThread([out] ICorDebugThread **ppThread); 847 HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass, 848 [out] ICorDebugValue **ppValue); 849}; 850 851[ 852 object, 853 local, 854 uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8), 855 pointer_default(unique) 856] 857interface ICorDebugEditAndContinueSnapshot : IUnknown 858{ 859 HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid); 860 HRESULT GetMvid([out] GUID *pMvid); 861 HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA); 862 HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA); 863 HRESULT SetPEBytes([in] IStream *pIStream); 864 HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]); 865 HRESULT SetPESymbolBytes([in] IStream *pIStream); 866}; 867 868[ 869 object, 870 local, 871 uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d), 872 pointer_default(unique) 873] 874interface ICorDebugModule : IUnknown 875{ 876 HRESULT GetProcess([out] ICorDebugProcess **ppProcess); 877 HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress); 878 HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly); 879 HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); 880 HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts); 881 HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks); 882 HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction); 883 HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction); 884 HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass); 885 HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint); 886 HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot); 887 HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj); 888 HRESULT GetToken([out] mdModule *pToken); 889 HRESULT IsDynamic([out] BOOL *pDynamic); 890 HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue); 891 HRESULT GetSize([out] ULONG32 *pcBytes); 892 HRESULT IsInMemory([out] BOOL *pInMemory); 893}; 894 895[ 896 object, 897 local, 898 uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D), 899 pointer_default(unique) 900] 901interface ICorDebugClass : IUnknown 902{ 903 HRESULT GetModule([out] ICorDebugModule **pModule); 904 HRESULT GetToken([out] mdTypeDef *pTypeDef); 905 HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame, 906 [out] ICorDebugValue **ppValue); 907}; 908 909[ 910 object, 911 local, 912 uuid(df59507c-d47a-459e-bce2-6427eac8fd06), 913 pointer_default(unique) 914] 915interface ICorDebugAssembly : IUnknown 916{ 917 HRESULT GetProcess([out] ICorDebugProcess **ppProcess); 918 HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain); 919 HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules); 920 HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); 921 HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]); 922}; 923 924 925[ 926 object, 927 local, 928 uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D), 929 pointer_default(unique) 930] 931interface ICorDebugFunction : IUnknown 932{ 933 HRESULT GetModule([out] ICorDebugModule **ppModule); 934 HRESULT GetClass([out] ICorDebugClass **ppClass); 935 HRESULT GetToken([out] mdMethodDef *pMethodDef); 936 HRESULT GetILCode([out] ICorDebugCode **ppCode); 937 HRESULT GetNativeCode([out] ICorDebugCode **ppCode); 938 HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint); 939 HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig); 940 HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion); 941}; 942 943[ 944 object, 945 local, 946 uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD), 947 pointer_default(unique) 948] 949interface ICorDebugUnmanagedCallback : IUnknown 950{ 951 HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand); 952}; 953 954[ 955 object, 956 local, 957 uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036), 958 pointer_default(unique) 959] 960interface ICorDebugEditAndContinueErrorInfo : IUnknown 961{ 962 HRESULT GetModule([out] ICorDebugModule **ppModule); 963 HRESULT GetToken([out]mdToken *pToken); 964 HRESULT GetErrorCode([out]HRESULT *pHr); 965 HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString, 966 [out] WCHAR szString[]); 967} 968 969[ 970 object, 971 local, 972 uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD), 973 pointer_default(unique) 974] 975interface ICorDebugObjectValue : ICorDebugValue 976{ 977 HRESULT GetClass([out] ICorDebugClass **ppClass); 978 HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef, 979 [out] ICorDebugValue **ppValue); 980 HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction); 981 HRESULT GetContext([out] ICorDebugContext **ppContext); 982 HRESULT IsValueClass([out] BOOL *pbIsValueClass); 983 HRESULT GetManagedCopy([out] IUnknown **ppObject); 984 HRESULT SetFromManagedCopy([in] IUnknown *pObject); 985}; 986 987[ 988 object, 989 local, 990 uuid(CC7BCB00-8A68-11d2-983C-0000F808342D), 991 pointer_default(unique) 992] 993interface ICorDebugContext : ICorDebugObjectValue 994{ 995}; 996 997[ 998 object, 999 local, 1000 uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D), 1001 pointer_default(unique) 1002] 1003interface ICorDebugCode : IUnknown 1004{ 1005 HRESULT IsIL([out] BOOL *pbIL); 1006 HRESULT GetFunction([out] ICorDebugFunction **ppFunction); 1007 HRESULT GetAddress([out] CORDB_ADDRESS *pStart); 1008 HRESULT GetSize([out] ULONG32 *pcBytes); 1009 HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint); 1010 HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset, 1011 [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize); 1012 HRESULT GetVersionNumber([out] ULONG32 *nVersion); 1013 HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap, 1014 [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]); 1015 HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap, 1016 [out] ULONG32 offsets[]); 1017}; 1018 1019[ 1020 object, 1021 local, 1022 uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42), 1023 pointer_default(unique) 1024] 1025interface ICorDebugMDA : IUnknown 1026{ 1027 HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); 1028 1029 HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); 1030 1031 HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]); 1032 1033 typedef enum CorDebugMDAFlags 1034 { 1035 MDA_FLAG_SLIP = 0x2 1036 } CorDebugMDAFlags; 1037 1038 HRESULT GetFlags([in] CorDebugMDAFlags * pFlags); 1039 1040 HRESULT GetOSThreadId([out] DWORD * pOsTid); 1041}; 1042