2

定义一个新的宏是否可以满足我向用户显示失败断言的需要,并为开发人员提供足够的信息来调试问题。

给用户的消息,用户最后应该如何处理这个消息给开发者的信息

#define ASSERT(f) \
    do \
    { \
    if (!(f) && AfxAssertFailedLine(THIS_FILE, __LINE__)) \
        AfxDebugBreak(); \
    } while (0) \

我们使用的示例消息 fn,

MessageBox(_T("Error in finding file."),_T("TITLE"),MB_ICONERROR);
4

5 回答 5

4

消息框不得向开发人员显示任何信息。开发人员的信息必须保存在一些日志文件中,并且用户要求将文件传输给开发人员。

PS:你的问题非常简短。

于 2009-12-01T11:09:37.577 回答
3

从最终用户的角度来看,我会考虑几件事。

  • 目标受众是谁? 如果你的祖母正在使用这个程序,这些断言消息框除了让她感到沮丧之外,还能做些什么吗?
  • 这些断言多久会失败一次? 在一周的正常使用中,一个断言肯定会证明将其保留在程序中是合理的,但一个小时的几个断言只会激怒用户。中间立场显然很难衡量。
  • 您是否考虑过在程序中添加“启用断言”首选项? 这样一来,如果有更多技术头脑(且乐于助人)的用户,他们可以显式启用断言并在出现问题时通知您;如果一些用户不知道什么是断言或者他们为什么会在你的程序中弹出窗口,他们可以禁用断言并继续愉快地使用你的程序。希望您可以在弹出窗口上放置一个“不再向我显示断言失败消息”复选框。

我会说强制用户弹出断言是一个坏主意,但允许他们启用或禁用警告将是一个好方法。

于 2009-11-27T14:53:34.843 回答
1

就在问了这个问题之后,我读到SMART_ASSERT了 Andrei Alexandrescu 和 John Torjo 在Enhancing Assertions中提到的内容。这看起来对我来说是正确的候选人,但是那篇文章中的源链接已损坏,有人可以给我 SMART_ASSERT 的源代码?

于 2009-12-01T13:56:03.733 回答
0

除非他们都是程序员,否则永远不要向用户公开任何内部信息,而是使用日志文件和弹出窗口,提议(自动)将这些日志发送给开发人员。

于 2009-12-01T11:13:07.710 回答
0

我不会让用户看到任何真正的调试信息,因为它只会让你的应用程序看起来很成熟。

其次,为什么要使用 do-while 循环而不是常规的 {} 范围?

于 2009-12-03T21:35:11.820 回答