1

There are plenty of logging/trace systems for letting your program output data or strings or state as it runs. Most of these let you print arbitrary strings which you can view live or after your program runs.

I noticed an ad here on SO for Smartinspect which seems to take this to a higher level, giving stack traces for each log, fancier options like plotting graphs and data values which change over time, and a lot of polish to the basic idea of a simple list of output text strings.

Since I use C++, Smartinspect won't even work for me.

A little googling finds tons of logging frameworks, but nothing that seems to do anything more than text dumps. Are their fancier tools (similar to Smartinspect?) that do more? Commercial or open source is fine, and multiplatform is a big plus.

4

3 回答 3

4

我知道这不是您最可能要寻找的答案,但我建议您很难(如果不是不可能)为 C++ 找到这样的框架。像转储堆栈这样的事情不能像 Java 这样的语言那样以可移植的方式完成,Java 不仅在所有平台上共享一个公共运行时,而且还提供强大的自省功能。

我不会用 Java 编程,但我的猜测是它可以像 Python 一样提供堆栈跟踪:堆栈可能只是运行时中的另一个可以检查和操作的对象。

另一方面,C++ 没有这些优点:它意味着它是一种接近金属的语言,基本上将面向对象主义添加到 C 中(我相信其他人会对 C++ 的好处提出更精巧的解释C 但那是另一个讨论)。

简而言之,C++ 的丰富程度不足以以通用方式提供您需要的那种特性。可能有一些特定于平台的代码可以在定义的点为您获取其中的一些信息,但它肯定不会是符合标准的跨平台 C++。

关于图表等,这听起来更像是后处理,你应该能够找到一些东西,或者更有可能,你可以输出你的日志消息,格式可以被这些现有工具中的一些解释.

您可以查看的其他内容是与 syslogd 集成,为此,可能还有更丰富的分析工具(这将为您提供与 SmartInspect 所宣传的功能类似的功能 - 即基于 TCP/IP 的日志记录)。

注意:我在这里所说的很多关于 C++ 的内容都来自以前的经验,他们试图在 C++ 中找到合适的框架来做一些微调、内省类型的事情(例如适当的模拟对象等)。

于 2009-04-06T12:57:19.090 回答
2

几年前,我在 DDJ 上写了一篇关于在 C/C++ 中使用 Windows 和 Unix/Linux 转储堆栈的文章。也许它可以帮助你:

http://www.ddj.com/architect/185300443

于 2009-04-06T15:23:30.907 回答
0

如果您可以将自己限制在某个平台上,则可以手动将堆栈跟踪添加到您的日志中。我们使用例如 glibc 功能来获取 Linux 上的堆栈跟踪,以将堆栈跟踪附加到我们的异常类中。Windows 上有类似的功能,但如前所述,这些基础设施不可移植。

于 2009-04-06T15:22:00.100 回答