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

确定应用程序的退出点。C++/Linux

  •  2
  • Neal  · 技术社区  · 16 年前

    我正在开发一个大型应用程序(NS2),在某个地方,有人在其中放置了一个出口(1),没有任何调试或打印语句,并且正在执行它。我不想手动检查调用exit的每个文件来找出程序退出的原因。是否可以确定程序退出的位置?这是在Linux上运行的,用C++编码。在gdb中可以这样做吗?

    3 回复  |  直到 16 年前
        1
  •  8
  •   Charlie Martin    16 年前

    当然。在出口(3)的开始处放置一个断点。当它坏了,看看那堆。

    第二种选择,在truss(1)下运行(我很确定有truss的Linux版本)。

    strace(1) .

    更新

    实际上,我在另一个问题中遇到了另一种方法: here's a link .

        2
  •  3
  •   Community CDub    8 年前

    如果您提供自己的 exit() ,然后将优先使用该库中的一个。构建它,将其加载到调试器中,并在 退出() ,运行程序,然后查看它的来源。

    或作为 Charlie 说,只要在库上放置一个断点 退出() . 如果要运行其他特定代码位,请使用上面的方法。

        3
  •  0
  •   lothar    16 年前

    正如您似乎可以访问源代码一样,我只需搜索退出和分析代码的调用。然后,您也可以通过用更合适的东西替换出口来修复它。

    如果所有代码都在目录中 SRC A

    grep -r exit src
    

    应查找所有出现的单词exit

    如果您没有访问代码的权限,请按照Charlie的建议进行操作。