SMART ASSERT for C ++应用程序?

时间:2009-11-20 06:16:31

标签: c++ visual-c++ messagebox assertions

定义一个新的宏是否有利于我需要向用户显示失败的断言,并且只有足够的信息供开发人员调试问题。

  

用户留言,是什么   用户应该在开发者的最后信息中使用此消息

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

我们使用的示例消息fn,

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

5 个答案:

答案 0 :(得分:4)

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

PS:你的问题非常短暂。

答案 1 :(得分:3)

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

  • 谁是目标受众?如果你的祖母正在使用这个程序,那么这些断言留言箱会不会让她感到沮丧?
  • 这些断言失败的频率是多少?正常使用一周内的一个断言肯定会证明将其保留在程序中是合理的,但几个小时就会激怒用户。中间地带显然很难衡量。
  • 您是否考虑过在程序中加入“启用断言”首选项?这样,如果有更多具有技术头脑(且乐于助人)的用户,他们可以明确启用断言并通知当事情出错时你;如果一些用户不知道断言是什么或为什么他们在你的程序中获得弹出窗口,他们可以只是禁用断言并继续愉快地使用你的程序。希望您可以在弹出窗口中输入“不要再显示断言失败消息”复选框。

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

答案 2 :(得分:1)

在提出这个问题之后,我读到了Enhancing Assertions中Andrei Alexandrescu和John Torjo提到的SMART_ASSERT。这看起来像是我的合适人选,但该文章中关于来源的链接是有人可以给我一些SMART_ASSERT的源代码吗?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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