首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual Studio2005 c++多线程程序中跟踪函数进入和退出的快速方法是什么?

在Visual Studio2005 c++多线程程序中跟踪函数进入和退出的快速方法是什么?
EN

Stack Overflow用户
提问于 2008-10-26 19:52:37
回答 3查看 897关注 0票数 3

由于我使用activemq-cpp API的方式,我的ActiveMQ库中出现了间歇性崩溃。如果我能观察到导致崩溃的每个函数被调用,那么调试这个问题就会容易得多。在Visual Studio2005 c++多线程程序中,有没有快速跟踪函数进入和退出的方法?

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-26 19:54:26

使用Tracer对象。如下所示:

代码语言:javascript
复制
class Tracer
{
public:
  Tracer(const char *functionName) : functionName_(functionName)
  {
    cout << "Entering function " << functionName_ << endl;
  }

  ~Tracer()
  {
    cout << "Exiting function " << functionName_ << endl;
  }

  const char *functionName_;
};

现在,您只需在函数顶部实例化一个Tracer对象,它将自动打印"exiting...“。当函数退出并调用析构函数时:

代码语言:javascript
复制
void foo()
{
  Tracer t("foo");
   ...
}
票数 3
EN

Stack Overflow用户

发布于 2008-10-26 20:04:42

当调试器附加到进程时,您可以在源代码中右键单击并选择“断点->添加TracePoint",其中包含您想要的文本(甚至还提供了一些宏)。

Tracepoint实际上是一个在某些消息打印机功能上带有"When Hit“字段的BreakPoint,它实际上不会中断进程。我发现它非常有用:它还有一个宏$FUNCTION,它可以做你需要的事情:打印它所在的函数(只要它有可用的调试信息……),还有一个$THREADID。

票数 2
EN

Stack Overflow用户

发布于 2008-10-26 20:53:19

上面的所有选项都很好,可以帮助你。但是我不明白如果你的代码有成千上万的函数,用鼠标设置TracePoing对你有什么帮助。

这类事情应该是你常规编程工作的一部分。在编写函数时,您应该考虑什么跟踪消息可以帮助您调试它。

您需要编写/使用现有的记录器,这些记录器可以拆分到节(读取器线程、工作线程等)。)和不同的日志级别(错误、警告、跟踪、详细等)。)。好的记录器应该以不会损害性能的方式来设计,这通常会损害冗长,但复杂的同步问题通常会重现,除非日志记录非常快,比如将字符串指针分配给可以在问题重现后转储的数组。我通常在开始调试时将完整的跟踪转储到屏幕上,如果我很幸运,错误以这种方式重现,修复错误是微不足道的,因为我已经有了足够的信息,当问题消失时,有趣的事情就开始了,你需要玩弄冗长来重现问题。

实际上,我发现调试比代码编写更有创意,更令人满意,但这只是我:)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/238517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档