2011-09-22 54 views
0

我有一个在HP-UX环境中执行的C应用程序,我需要获取堆栈跟踪。在HP-UX上使用libunwind并获取堆栈跟踪

我正在尝试使用U_STACK_TRACE,但输出到stderr是去其他地方,我需要它打印到一个字符串。

我该怎么做?

I.E.如何从U_STACK_TRACE获取输出并将其放入字符串中,而不是写入stderr。

回答

1

U_STACK_TRACE()将格式化的堆栈跟踪打印到标准错误。 _UNW_STACK_TRACE()在参数out_file指示的输出流上产生一个格式化的堆栈跟踪。该流必须是可写入的流才能生成输出。

因此,使用fopen()打开一个文件并调用_UNW_STACK_TRACE()而不是U_STACK_TRACE()。

+0

顺便说一下,我从使用Google找到的在线MAN页面中找到了第一段。你应该尝试一段时间,换句话说,RTFM;) – AlastairG

+0

是的,我有rtfm,但我想把它捕获为一个字符串,而不是文件或流。这可能吗? – Malfist

+0

显然不是,但你可以将它输出到临时文件,然后将文件读入缓冲区。你可以创建一个fifo或pipe,然后用FILE指针包装它,然后从fifo读出到你的字符串缓冲区中。 – AlastairG