Esempio n. 1
0
        /// <summary>
        /// Start trace collection.
        /// </summary>
        /// <param name="processId">Runtime process to trace</param>
        /// <param name="configuration">buffer size and provider configuration</param>
        /// <param name="sessionId">session id</param>
        /// <returns>Stream</returns>
        public static Stream CollectTracing(int processId, SessionConfiguration configuration, out ulong sessionId)
        {
            sessionId = 0;
            var message = new IpcMessage(DiagnosticsServerCommandSet.EventPipe, (byte)EventPipeCommandId.CollectTracing, configuration.Serialize());
            var stream  = IpcClient.SendMessage(processId, message, out var response);

            switch ((DiagnosticsServerCommandId)response.Header.CommandId)
            {
            case DiagnosticsServerCommandId.OK:
                sessionId = BitConverter.ToUInt64(response.Payload);
                break;

            case DiagnosticsServerCommandId.Error:
                // bad...
                var hr = BitConverter.ToInt32(response.Payload);
                throw new Exception($"Session start FAILED 0x{hr:X8}");

            default:
                break;
            }

            return(stream);
        }