代码之家  ›  专栏  ›  技术社区  ›  BVB

在整个项目中,我如何记录哪个线程从哪个类调用哪个函数,以及在什么时候调用哪个函数?

  •  1
  • BVB  · 技术社区  · 16 年前

    时间-线程名-函数名-类名

    我知道我可以通过使用_penterhook函数来实现这一点,它将在我的项目中调用的每个函数的开头执行(来源: http://msdn.microsoft.com/en-us/library/c63a9b7h%28VS.80%29.aspx

    谢谢您,

    3 回复  |  直到 16 年前
        1
  •  2
  •   Narfanator    16 年前

    我使用过一个有类似需求的系统(ARM嵌入式设备)。我们不得不从头开始构建它,但是我们使用了一些CodeWarrior的东西来完成它,然后使用映射文件来查找函数名。

    使用CodeWarrior,您可以将一些代码插入到每个函数的开头和结尾,并使用该代码跟踪何时进入每个函数以及何时切换线程。我们用的是组装,你可能也需要,但这比你想象的要容易。您的寄存器之一将是您的返回值,这是一个十六进制值。如果使用映射文件编译,则可以使用该十六进制值查找该函数的(损坏的)名称。您可以在函数名中找到类名。

    输入的函数#####

    切换到线程#

    (PS-实际编码应该更像1 21361987236,2 1238721312,因为您实际上不想发送字符)

    如果你真的在运行多个线程,它可能会变得更难,或者更相似-我不知道。我会把时间信息放在每件事上,然后为每个线程提供一个单独的流。尽管您可能只是能够检测到您正在哪个处理器上运行,并报告它,对于哪个线程。。。。不过,我不知道这是否管用。

    不过,基本的想法是:报告每个步骤(函数进入/退出、线程切换和分配),然后在桌面端重新组装您关心的信息,在那里您有多余的处理。

        2
  •  1
  •   Drakosha    16 年前

    海湾合作委员会 PRETTY_FUNCTION 定义。关于线程,您可以随时调用 gettid 或者类似的。

        3
  •  1
  •   Jason Aller    8 年前

    我已经编写了一些日志系统,它们只是增加一个线程并存储在线程本地数据中。这有助于给出日志语句的线程(时间很容易打印出来)

    用于跟踪 函数自动调用,我不太确定。如果只是几个,您可以轻松地编写一个对象&使用 __FUNCNAME__ #定义(或类似的编译器)。