diff --git a/Makefile b/Makefile
index fe6368d570410ab569f9083ae2602a08c30ec3f1..5c618d302241aa31a0f129574b8fb2658f265201 100644
--- a/Makefile
+++ b/Makefile
@@ -2262,6 +2262,7 @@ LIBGRPC_SRC = \
     src/core/channel/noop_filter.c \
     src/core/compression/algorithm.c \
     src/core/compression/message_compress.c \
+    src/core/debug/trace.c \
     src/core/httpcli/format_request.c \
     src/core/httpcli/httpcli.c \
     src/core/httpcli/httpcli_security_context.c \
@@ -2401,6 +2402,7 @@ src/core/channel/metadata_buffer.c: $(OPENSSL_DEP)
 src/core/channel/noop_filter.c: $(OPENSSL_DEP)
 src/core/compression/algorithm.c: $(OPENSSL_DEP)
 src/core/compression/message_compress.c: $(OPENSSL_DEP)
+src/core/debug/trace.c: $(OPENSSL_DEP)
 src/core/httpcli/format_request.c: $(OPENSSL_DEP)
 src/core/httpcli/httpcli.c: $(OPENSSL_DEP)
 src/core/httpcli/httpcli_security_context.c: $(OPENSSL_DEP)
@@ -2557,6 +2559,7 @@ $(OBJDIR)/$(CONFIG)/src/core/channel/metadata_buffer.o:
 $(OBJDIR)/$(CONFIG)/src/core/channel/noop_filter.o: 
 $(OBJDIR)/$(CONFIG)/src/core/compression/algorithm.o: 
 $(OBJDIR)/$(CONFIG)/src/core/compression/message_compress.o: 
+$(OBJDIR)/$(CONFIG)/src/core/debug/trace.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/format_request.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli_security_context.o: 
@@ -2734,6 +2737,7 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/channel/noop_filter.c \
     src/core/compression/algorithm.c \
     src/core/compression/message_compress.c \
+    src/core/debug/trace.c \
     src/core/httpcli/format_request.c \
     src/core/httpcli/httpcli.c \
     src/core/httpcli/httpcli_security_context.c \
@@ -2874,6 +2878,7 @@ $(OBJDIR)/$(CONFIG)/src/core/channel/metadata_buffer.o:
 $(OBJDIR)/$(CONFIG)/src/core/channel/noop_filter.o: 
 $(OBJDIR)/$(CONFIG)/src/core/compression/algorithm.o: 
 $(OBJDIR)/$(CONFIG)/src/core/compression/message_compress.o: 
+$(OBJDIR)/$(CONFIG)/src/core/debug/trace.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/format_request.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli.o: 
 $(OBJDIR)/$(CONFIG)/src/core/httpcli/httpcli_security_context.o: 
diff --git a/build.json b/build.json
index fca657866a8bf7c72f246649da97ec83d0af39ad..172753ba4accf0a2809027edbaf504f43390781b 100644
--- a/build.json
+++ b/build.json
@@ -32,6 +32,7 @@
         "src/core/channel/noop_filter.h",
         "src/core/compression/algorithm.h",
         "src/core/compression/message_compress.h",
+        "src/core/debug/trace.h",
         "src/core/httpcli/format_request.h",
         "src/core/httpcli/httpcli.h",
         "src/core/httpcli/httpcli_security_context.h",
@@ -124,6 +125,7 @@
         "src/core/channel/noop_filter.c",
         "src/core/compression/algorithm.c",
         "src/core/compression/message_compress.c",
+        "src/core/debug/trace.c",
         "src/core/httpcli/format_request.c",
         "src/core/httpcli/httpcli.c",
         "src/core/httpcli/httpcli_security_context.c",
diff --git a/src/core/channel/channel_stack.h b/src/core/channel/channel_stack.h
index 98d095fccf1624f463e09b8c334c847a22ce2910..1ca95e7f1a6b99b7b89f22220b91398bd2d1efd7 100644
--- a/src/core/channel/channel_stack.h
+++ b/src/core/channel/channel_stack.h
@@ -45,10 +45,9 @@
 
 #include <grpc/grpc.h>
 #include <grpc/support/log.h>
+#include "src/core/debug/trace.h"
 #include "src/core/transport/transport.h"
 
-/* #define GRPC_CHANNEL_STACK_TRACE 1 */
-
 typedef struct grpc_channel_element grpc_channel_element;
 typedef struct grpc_call_element grpc_call_element;
 
@@ -246,9 +245,7 @@ typedef struct {
 
 /* A call stack tracks a set of related filters for one call, and guarantees
    they live within a single malloc() allocation */
-typedef struct {
-  size_t count;
-} grpc_call_stack;
+typedef struct { size_t count; } grpc_call_stack;
 
 /* Get a channel element given a channel stack and its index */
 grpc_channel_element *grpc_channel_stack_element(grpc_channel_stack *stack,
@@ -301,12 +298,7 @@ void grpc_call_element_recv_metadata(grpc_call_element *cur_elem,
 void grpc_call_element_send_cancel(grpc_call_element *cur_elem);
 void grpc_call_element_send_finish(grpc_call_element *cur_elem);
 
-#ifdef GRPC_CHANNEL_STACK_TRACE
-#define GRPC_CALL_LOG_OP(sev, elem, op) grpc_call_log_op(sev, elem, op)
-#else
 #define GRPC_CALL_LOG_OP(sev, elem, op) \
-  do {                                  \
-  } while (0)
-#endif
+  if (grpc_trace_bits & GRPC_TRACE_CHANNEL) grpc_call_log_op(sev, elem, op)
 
 #endif /* __GRPC_INTERNAL_CHANNEL_CHANNEL_STACK_H__ */
diff --git a/src/core/debug/trace.c b/src/core/debug/trace.c
new file mode 100644
index 0000000000000000000000000000000000000000..cdbe168fc85b09961355a69439a362a8041320ad
--- /dev/null
+++ b/src/core/debug/trace.c
@@ -0,0 +1,110 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/debug/trace.h"
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include "src/core/support/env.h"
+
+#if GRPC_ENABLE_TRACING
+gpr_uint32 grpc_trace_bits;
+
+static void add(const char *beg, const char *end, char ***ss, size_t *ns) {
+  size_t n = *ns;
+  size_t np = n + 1;
+  char *s = gpr_malloc(end - beg + 1);
+  memcpy(s, beg, end - beg);
+  s[end-beg] = 0;
+  *ss = gpr_realloc(*ss, sizeof(char**) * np);
+  (*ss)[n] = s;
+  *ns = np;
+}
+
+static void split(const char *s, char ***ss, size_t *ns) {
+  const char *c = strchr(s, ',');
+  if (c == NULL) {
+    add(s, s + strlen(s), ss, ns);
+  } else {
+    add(s, c, ss, ns);
+    split(c+1, ss, ns);
+  }
+}
+
+static void parse(const char *s) {
+  char **strings = NULL;
+  size_t nstrings = 0;
+  size_t i;
+  split(s, &strings, &nstrings);
+
+  grpc_trace_bits = 0;
+
+  for (i = 0; i < nstrings; i++) {
+    const char *s = strings[i];
+    if (0 == strcmp(s, "surface")) {
+      grpc_trace_bits |= GRPC_TRACE_SURFACE;
+    } else if (0 == strcmp(s, "channel")) {
+      grpc_trace_bits |= GRPC_TRACE_CHANNEL;
+    } else if (0 == strcmp(s, "tcp")) {
+      grpc_trace_bits |= GRPC_TRACE_TCP;
+    } else if (0 == strcmp(s, "secure_endpoint")) {
+      grpc_trace_bits |= GRPC_TRACE_SECURE_ENDPOINT;
+    } else if (0 == strcmp(s, "all")) {
+      grpc_trace_bits = -1;
+    } else {
+      gpr_log(GPR_ERROR, "Unknown trace var: '%s'", s);
+    }
+  }
+
+  for (i = 0; i < nstrings; i++) {
+    gpr_free(strings[i]);
+  }
+  gpr_free(strings);
+}
+
+void grpc_init_trace_bits() {
+  char *e = gpr_getenv("GRPC_TRACE");
+  if (e == NULL) {
+    grpc_trace_bits = 0;
+  } else {
+    parse(e);
+    gpr_free(e);
+  }
+}
+#else
+void grpc_init_trace_bits() {
+}
+#endif
+
diff --git a/src/core/debug/trace.h b/src/core/debug/trace.h
new file mode 100644
index 0000000000000000000000000000000000000000..167ef3c6ea6b949f3afc355a651c44406f71c82e
--- /dev/null
+++ b/src/core/debug/trace.h
@@ -0,0 +1,60 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_CORE_DEBUG_TRACE_H
+#define GRPC_CORE_DEBUG_TRACE_H
+
+#include <grpc/support/port_platform.h>
+
+/* set to zero to remove all debug trace code */
+#ifndef GRPC_ENABLE_TRACING
+# define GRPC_ENABLE_TRACING 1
+#endif
+
+typedef enum {
+  GRPC_TRACE_SURFACE = 1 << 0,
+  GRPC_TRACE_CHANNEL = 1 << 1,
+  GRPC_TRACE_TCP = 1 << 2,
+  GRPC_TRACE_SECURE_ENDPOINT = 1 << 3
+} grpc_trace_bit_value;
+
+#if GRPC_ENABLE_TRACING
+extern gpr_uint32 grpc_trace_bits;
+#else
+# define grpc_trace_bits 0
+#endif
+
+void grpc_init_trace_bits();
+
+#endif
+
diff --git a/src/core/iomgr/tcp_posix.c b/src/core/iomgr/tcp_posix.c
index 34eefc126bf893c30fd3b083d3a5c8eb2bae9af8..eceb0feadb1463ec6111aa40476b181f14190a53 100644
--- a/src/core/iomgr/tcp_posix.c
+++ b/src/core/iomgr/tcp_posix.c
@@ -45,6 +45,7 @@
 #include <unistd.h>
 
 #include "src/core/support/string.h"
+#include "src/core/debug/trace.h"
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/slice.h>
@@ -293,17 +294,17 @@ static void call_read_cb(grpc_tcp *tcp, gpr_slice *slices, size_t nslices,
                          grpc_endpoint_cb_status status) {
   grpc_endpoint_read_cb cb = tcp->read_cb;
 
-#ifdef GRPC_TRACE_TCP
-  size_t i;
-  gpr_log(GPR_DEBUG, "read: status=%d", status);
-  for (i = 0; i < nslices; i++) {
-    char *dump =
-        gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
-                    GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
-    gpr_log(GPR_DEBUG, "READ: %s", dump);
-    gpr_free(dump);
+  if (grpc_trace_bits & GRPC_TRACE_TCP) {
+    size_t i;
+    gpr_log(GPR_DEBUG, "read: status=%d", status);
+    for (i = 0; i < nslices; i++) {
+      char *dump =
+          gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
+                      GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
+      gpr_log(GPR_DEBUG, "READ: %s", dump);
+      gpr_free(dump);
+    }
   }
-#endif
 
   tcp->read_cb = NULL;
   cb(tcp->read_user_data, slices, nslices, status);
@@ -494,17 +495,17 @@ static grpc_endpoint_write_status grpc_tcp_write(grpc_endpoint *ep,
   grpc_tcp *tcp = (grpc_tcp *)ep;
   grpc_endpoint_write_status status;
 
-#ifdef GRPC_TRACE_TCP
-  size_t i;
+  if (grpc_trace_bits & GRPC_TRACE_TCP) {
+    size_t i;
 
-  for (i = 0; i < nslices; i++) {
-    char *data =
-        gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
-                    GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
-    gpr_log(GPR_DEBUG, "WRITE %p: %s", tcp, data);
-    gpr_free(data);
+    for (i = 0; i < nslices; i++) {
+      char *data =
+          gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
+                      GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
+      gpr_log(GPR_DEBUG, "WRITE %p: %s", tcp, data);
+      gpr_free(data);
+    }
   }
-#endif
 
   GPR_ASSERT(tcp->write_cb == NULL);
   slice_state_init(&tcp->write_state, slices, nslices, nslices);
diff --git a/src/core/security/secure_endpoint.c b/src/core/security/secure_endpoint.c
index 031f23dc79d109782c8104b7a50b05501f0d2919..d6bdf5a709f6304ab86f0645a1ef31f4b1f560fd 100644
--- a/src/core/security/secure_endpoint.c
+++ b/src/core/security/secure_endpoint.c
@@ -39,6 +39,7 @@
 #include <grpc/support/slice.h>
 #include <grpc/support/sync.h>
 #include "src/core/tsi/transport_security_interface.h"
+#include "src/core/debug/trace.h"
 
 #define STAGING_BUFFER_SIZE 8192
 
@@ -95,16 +96,16 @@ static void flush_read_staging_buffer(secure_endpoint *ep, gpr_uint8 **cur,
 
 static void call_read_cb(secure_endpoint *ep, gpr_slice *slices, size_t nslices,
                          grpc_endpoint_cb_status error) {
-#ifdef GRPC_TRACE_SECURE_TRANSPORT
-  size_t i;
-  for (i = 0; i < nslices; i++) {
-    char *data =
-        gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
-                    GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
-    gpr_log(GPR_DEBUG, "READ %p: %s", ep, data);
-    gpr_free(data);
+  if (grpc_trace_bits & GRPC_TRACE_SECURE_ENDPOINT) {
+    size_t i;
+    for (i = 0; i < nslices; i++) {
+      char *data =
+          gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
+                      GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
+      gpr_log(GPR_DEBUG, "READ %p: %s", ep, data);
+      gpr_free(data);
+    }
   }
-#endif
   ep->read_cb(ep->read_user_data, slices, nslices, error);
   secure_endpoint_unref(ep);
 }
@@ -230,15 +231,15 @@ static grpc_endpoint_write_status endpoint_write(grpc_endpoint *secure_ep,
   grpc_endpoint_write_status status;
   GPR_ASSERT(ep->output_buffer.count == 0);
 
-#ifdef GRPC_TRACE_SECURE_TRANSPORT
-  for (i = 0; i < nslices; i++) {
-    char *data =
-        gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
-                    GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
-    gpr_log(GPR_DEBUG, "WRITE %p: %s", ep, data);
-    gpr_free(data);
+  if (grpc_trace_bits & GRPC_TRACE_SECURE_ENDPOINT) {
+    for (i = 0; i < nslices; i++) {
+      char *data =
+          gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
+                      GPR_SLICE_LENGTH(slices[i]), GPR_HEXDUMP_PLAINTEXT);
+      gpr_log(GPR_DEBUG, "WRITE %p: %s", ep, data);
+      gpr_free(data);
+    }
   }
-#endif
 
   for (i = 0; i < nslices; i++) {
     gpr_slice plain = slices[i];
diff --git a/src/core/surface/init.c b/src/core/surface/init.c
index 43c9906a8a4c01666230d583600346ea8747894c..fa4614abc84e524941dea85f1eede74a90076198 100644
--- a/src/core/surface/init.c
+++ b/src/core/surface/init.c
@@ -32,8 +32,9 @@
  */
 
 #include <grpc/grpc.h>
-#include "src/core/statistics/census_interface.h"
 #include "src/core/iomgr/iomgr.h"
+#include "src/core/debug/trace.h"
+#include "src/core/statistics/census_interface.h"
 
 static gpr_once g_init = GPR_ONCE_INIT;
 static gpr_mu g_init_mu;
@@ -49,6 +50,7 @@ void grpc_init(void) {
 
   gpr_mu_lock(&g_init_mu);
   if (++g_initializations == 1) {
+    grpc_init_trace_bits();
     grpc_iomgr_init();
     census_init();
   }
diff --git a/src/core/surface/surface_trace.h b/src/core/surface/surface_trace.h
index f998de1ad6aaf8da4f9da41f8f7793b3070c397e..4d478d6470ee18348c4f90cb02a35c48e7becf4e 100644
--- a/src/core/surface/surface_trace.h
+++ b/src/core/surface/surface_trace.h
@@ -34,21 +34,14 @@
 #ifndef __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__
 #define __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__
 
+#include "src/core/debug/trace.h"
 #include <grpc/support/log.h>
 
-/* #define GRPC_ENABLE_SURFACE_TRACE 1 */
-
-#ifdef GRPC_ENABLE_SURFACE_TRACE
 #define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event)    \
-  do {                                                  \
+  if (grpc_trace_bits & GRPC_TRACE_SURFACE) {           \
     char *_ev = grpc_event_string(event);               \
     gpr_log(GPR_INFO, "RETURN_EVENT[%p]: %s", cq, _ev); \
     gpr_free(_ev);                                      \
-  } while (0)
-#else
-#define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event) \
-  do {                                               \
-  } while (0)
-#endif
+  }
 
 #endif /* __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__ */
diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj
index f51122d1b17eb7e3cc277359925916b8be4ebe6d..a7ecf5e5bfddc140bebf437dd0a2f21c707d75a7 100644
--- a/vsprojects/vs2013/grpc.vcxproj
+++ b/vsprojects/vs2013/grpc.vcxproj
@@ -109,6 +109,7 @@
     <ClInclude Include="..\..\src\core\channel\noop_filter.h" />
     <ClInclude Include="..\..\src\core\compression\algorithm.h" />
     <ClInclude Include="..\..\src\core\compression\message_compress.h" />
+    <ClInclude Include="..\..\src\core\debug\trace.h" />
     <ClInclude Include="..\..\src\core\httpcli\format_request.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli_security_context.h" />
@@ -240,6 +241,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\httpcli.c">
diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters
index 9aed6670514dbb39d43ebf22fb545282e77b7f55..8626604551cc957c5d9167892818e18ee10a6e01 100644
--- a/vsprojects/vs2013/grpc.vcxproj.filters
+++ b/vsprojects/vs2013/grpc.vcxproj.filters
@@ -82,6 +82,9 @@
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
       <Filter>src\core\compression</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+      <Filter>src\core\debug</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
       <Filter>src\core\httpcli</Filter>
     </ClCompile>
@@ -422,6 +425,9 @@
     <ClInclude Include="..\..\src\core\compression\message_compress.h">
       <Filter>src\core\compression</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\debug\trace.h">
+      <Filter>src\core\debug</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\httpcli\format_request.h">
       <Filter>src\core\httpcli</Filter>
     </ClInclude>
@@ -668,6 +674,9 @@
     <Filter Include="src\core\compression">
       <UniqueIdentifier>{263cb913-dfe6-42a4-096b-cac231f76305}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\debug">
+      <UniqueIdentifier>{1da7ef8a-a06d-5499-b3de-19fee4a4214d}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\httpcli">
       <UniqueIdentifier>{a9bc00ad-835f-c625-c6d9-6a1324f98b9f}</UniqueIdentifier>
     </Filter>
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj b/vsprojects/vs2013/grpc_shared.vcxproj
index 58022a33d5b8e0952e18199bde2c357402926079..d53abeb6d46ee047e0f16a1237aa7be2918937fb 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj
+++ b/vsprojects/vs2013/grpc_shared.vcxproj
@@ -113,6 +113,7 @@
     <ClInclude Include="..\..\src\core\channel\noop_filter.h" />
     <ClInclude Include="..\..\src\core\compression\algorithm.h" />
     <ClInclude Include="..\..\src\core\compression\message_compress.h" />
+    <ClInclude Include="..\..\src\core\debug\trace.h" />
     <ClInclude Include="..\..\src\core\httpcli\format_request.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli_security_context.h" />
@@ -244,6 +245,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\httpcli.c">
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj.filters b/vsprojects/vs2013/grpc_shared.vcxproj.filters
index 9aed6670514dbb39d43ebf22fb545282e77b7f55..8626604551cc957c5d9167892818e18ee10a6e01 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_shared.vcxproj.filters
@@ -82,6 +82,9 @@
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
       <Filter>src\core\compression</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+      <Filter>src\core\debug</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
       <Filter>src\core\httpcli</Filter>
     </ClCompile>
@@ -422,6 +425,9 @@
     <ClInclude Include="..\..\src\core\compression\message_compress.h">
       <Filter>src\core\compression</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\debug\trace.h">
+      <Filter>src\core\debug</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\httpcli\format_request.h">
       <Filter>src\core\httpcli</Filter>
     </ClInclude>
@@ -668,6 +674,9 @@
     <Filter Include="src\core\compression">
       <UniqueIdentifier>{263cb913-dfe6-42a4-096b-cac231f76305}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\debug">
+      <UniqueIdentifier>{1da7ef8a-a06d-5499-b3de-19fee4a4214d}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\httpcli">
       <UniqueIdentifier>{a9bc00ad-835f-c625-c6d9-6a1324f98b9f}</UniqueIdentifier>
     </Filter>
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj
index 8b3b853cce728d5b9627bb2f797cd33993a49cb5..e8d0a799575e98320dcadd3355ace9f4ba685633 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj
@@ -98,6 +98,7 @@
     <ClInclude Include="..\..\src\core\channel\noop_filter.h" />
     <ClInclude Include="..\..\src\core\compression\algorithm.h" />
     <ClInclude Include="..\..\src\core\compression\message_compress.h" />
+    <ClInclude Include="..\..\src\core\debug\trace.h" />
     <ClInclude Include="..\..\src\core\httpcli\format_request.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli.h" />
     <ClInclude Include="..\..\src\core\httpcli\httpcli_security_context.h" />
@@ -205,6 +206,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\httpcli.c">
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
index 6fac8464227f0ad7e323a53762454d19dbdf1653..ef82e34a62aaa9e6f0487fe3070c8b9440afac42 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
@@ -46,6 +46,9 @@
     <ClCompile Include="..\..\src\core\compression\message_compress.c">
       <Filter>src\core\compression</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\debug\trace.c">
+      <Filter>src\core\debug</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\httpcli\format_request.c">
       <Filter>src\core\httpcli</Filter>
     </ClCompile>
@@ -353,6 +356,9 @@
     <ClInclude Include="..\..\src\core\compression\message_compress.h">
       <Filter>src\core\compression</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\debug\trace.h">
+      <Filter>src\core\debug</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\httpcli\format_request.h">
       <Filter>src\core\httpcli</Filter>
     </ClInclude>
@@ -599,6 +605,9 @@
     <Filter Include="src\core\compression">
       <UniqueIdentifier>{2e3aca1d-223d-10a1-b282-7f9fc68ee6f5}</UniqueIdentifier>
     </Filter>
+    <Filter Include="src\core\debug">
+      <UniqueIdentifier>{6d8d5774-7291-554d-fafa-583463cd3fd9}</UniqueIdentifier>
+    </Filter>
     <Filter Include="src\core\httpcli">
       <UniqueIdentifier>{1ba3a245-47e7-89b5-b0c9-aca758bd0277}</UniqueIdentifier>
     </Filter>