我正在努力改写一些 c ++ cmd行程序中的代码。
我 改变了低级数据结构 它使用,新版本通过所有 没有任何测试(相当多) 问题,我得到了正确的输出 从新版本和旧版本... 但是,当给予某些输入时,他们会给出 不同的行为。
达到目的:在某种程度上 一个大项目,我没有任何线索 如何追踪执行时 流动发散,所以......有办法追踪 函数调用树(可能排除 std call),我不知道,行 源文件和源中的数字 名称? 也许一些gcc或宏观功夫?
我需要一个Linux解决方案,因为那是程序运行的地方。
答案 0 :(得分:0)
但是,当给出某些输入时,它们会给出不同的行为
我会扩展新版本和新版本的日志记录,以便了解certain input
算法的更好工作。当它变得更清晰时,你可以使用gdb,如果你仍然需要它。
<强>更新强>
好的,至于我记录是可以的,但你不想添加它。
另一种方法是追踪。实际上我只在Solaris上使用它,但我发现它也存在于Linux上。我没有在Linux上使用过它,所以你可以测试一下这个想法。
您可以使用SystemTap
用户空间探测
SystemTap最初专注于内核空间探测。但是,有许多用户空间探测的情况 帮助诊断问题。 SystemTap 0.6增加了支持以允许探测 用户空间进程。 SystemTap包括对探测条目的支持 进入并从用户空间进程中的函数返回,探测 用户空间代码中的预定义标记,以及监视用户进程 事件
我可以保证它会起作用,但为什么不试一试呢?
文档中甚至有一个例子:
如果你想看看如何调用函数xmalloc函数 通过命令ls,您可以使用用户空间回溯功能 提供这些信息。
stap -d /bin/ls --ldd \
-e 'probe process("ls").function("xmalloc") {print_ustack(ubacktrace())}' \
-c "ls /"