2

我正在尝试获取导致函数 func 的调用堆栈,每次在我的可执行文件中调用它时,只要它是自动化的(因为' func' 被击中数千次)。我可以访问 dbx,所以我想我可以这样做:

(dbx) { when in func { where -q; }; } | awk '{ 打印 }' > out.txt

但我没有在控制台或文件中看到调用堆栈输出(我已确认该函数被命中)。dbx 的文档指出“where”是一个不可重定向的命令,但我想知道人们是否有任何变通方法来执行此操作?

4

1 回答 1

1

一些 dbx 命令需要接受具有 shell 元字符的参数。例如:打印 (a < 34)

对于这样的命令,您可以将重定向放在命令之前: (dbx) > /tmp/t print (a < 34)

dbx 命令行上的“帮助重定向”将解释它。

在您的示例中,“where”命令接受函数名作为参数,(在 c++ 中)可以使用 < 和 > 字符。所以它属于这个特殊的类别。

不幸的是,没有办法在命令之前使用管道操作。因此,您需要使用涉及临时文件的不同方案来获得您想要的内容。我上面提到的帮助主题中有示例。

于 2010-09-07T18:37:58.620 回答