diff --git a/documentation/debugging.sgml b/documentation/debugging.sgml
index 151af97e291..4b579d8ccbe 100644
--- a/documentation/debugging.sgml
+++ b/documentation/debugging.sgml
@@ -427,6 +427,14 @@ TRACE("(%d, %p, ...)\n", par1, par2, ...);
+
+
+ if you want to name a parameter, use = :
+
+TRACE("(fd=%d, file=%s): stub\n", fd, name);
+
+
+
for stubs, you should output a FIXME
@@ -440,16 +448,37 @@ FIXME("(%x, %d, ...): stub\n", par1, par2, ...);
try to output one line per message. That is, the format
string should contain only one \n and it
- should always appear at the end of the string. (there are
- many reasons for this requirement, one of them is that
- each debug macro adds things to the beginning of the line)
+ should always appear at the end of the string.
- if you want to name a parameter, use = :
+ if the output string needs to be dynamically constructed,
+ render it in memory before outputting it:
-FIXME("(fd=%d, file=%s): stub\n", fd, name);
+char buffer[128] = "";
+
+if (flags & FLAG_A) strcat(buffer, "FLAG_A ");
+if (flags & FLAG_B) strcat(buffer, "FLAG_B ");
+if (flags & FLAG_C) strcat(buffer, "FLAG_C ");
+TRACE("flags = %s\n", buffer);
+
+ Most of the time however, it is better to create a helper
+ function that renders to a temporary buffer:
+
+static const char *dbgstr_flags(int flags)
+{
+ char buffer[128] = "";
+
+ if (flags & FLAG_A) strcat(buffer, "FLAG_A ");
+ if (flags & FLAG_B) strcat(buffer, "FLAG_B ");
+ if (flags & FLAG_C) strcat(buffer, "FLAG_C ");
+ return wine_dbg_sprintf("flags = %s\n\n", buffer);
+}
+
+...
+
+TRACE("flags = %s\n", dbgstr_flags(flags));