TTD 호출 개체
설명
TTD 호출 개체는 추적 과정에서 발생하는 함수 호출에 대한 정보를 제공하는 데 사용됩니다.
매개 변수
| 속성 | 설명 |
|---|---|
| 함수! SymbolName | 큰따옴표로 쉼표로 구분된 하나 이상의 큰따옴표가 들어 있습니다. 예를 들어 dx @$cursession. TTD. Calls("module!symbol1", "module!symbol2", ...) |
속성
| 속성 | 설명 |
|---|---|
| EventType | 이벤트의 유형입니다. 모든 TTD 호출 개체에 대한 "호출"입니다. |
| 스레드 Id | 요청을 수행한 스레드의 OS 스레드 ID입니다. |
| UniqueThreadId | 추적 전체의 스레드에 대한 고유 ID입니다. 일반 스레드 ID는 프로세스의 수명 동안 다시 사용할 수 있지만 UniqueThreadIds는 사용할 수 없습니다. |
| 기능 | 함수의 기호 이름입니다. |
| FunctionAddress | 메모리에 있는 함수의 주소입니다. |
| ReturnValue | 함수의 반환 값입니다. 함수에 void 형식이 있으면 이 속성이 존재하지 않습니다. |
Children
| Object | 설명 |
|---|---|
| Parameters[] | 함수에 전달된 매개 변수를 포함하는 배열입니다. 요소 수는 함수의 형식 서명에 따라 달라집니다. |
| TimeStart | 호출을 시작할 때의 위치를 설명하는 위치 개체 입니다. |
| TimeEnd | 호출이 끝날 때의 위치를 설명하는 위치 개체 입니다. |
설명
시간 이동 디버깅은 PDB에 제공된 기호 정보를 사용하여 함수 및 해당 형식의 매개 변수 수, 반환 값 형식 및 호출 규칙을 결정합니다. 기호 정보를 사용할 수 없거나 기호가 공용 기호 정보로 제한된 경우에도 쿼리를 수행할 수 있습니다. 시간 이동 쿼리 엔진은 이 시나리오에서 몇 가지 가정을 수행합니다.
- 함수에 4개의 64비트 부호 없는 정수 매개 변수가 있습니다.
- 반환 값은 부호 없는 64비트 정수입니다.
- 함수 이름은 고정 문자열 "UnknownOrMissingSymbols"로 설정됩니다.
이러한 가정을 통해 적절한 기호 정보가 없는 경우 쿼리를 만들 수 있습니다. 그러나 최상의 결과를 위해 가능한 경우 전체 PDB 기호를 사용합니다.
호출 함수는 계산을 수행하며 추적 크기에 따라 실행하는 데 시간이 걸릴 수 있습니다. 계산 중에 CPU 사용량이 급증하고 작업 관리자에서 CPU 사용량을 확인하면 계산이 진행 중임을 나타냅니다. 쿼리 결과는 메모리에 캐시되므로 이전에 쿼리된 호출에 대한 후속 쿼리가 훨씬 더 빠릅니다.
Example Usage
이 예제에서는 ucrtbase!initterm에 대한 호출 개체를 보여줍니다.
0:000> dx -r2 @$cursession.TTD.Calls("ucrtbase!initterm")
@$cursession.TTD.Calls("ucrtbase!initterm")
[0x0]
EventType : Call
ThreadId : 0x2074
UniqueThreadId : 0x2
TimeStart : 1E:5D0
TimeEnd : 2D:E
Function : ucrtbase!_initterm
FunctionAddress : 0x7ffb345825d0
ReturnAddress : 0x7ff6a521677e
Parameters