Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在HP-UX和Linux上进行堆栈展开大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我需要在某些点获取我的C应用程序的堆栈信息.我已经阅读了文档并搜索了网络,但仍然无法弄清楚我是如何做到的.你能指出一个简单的过程解释吗?或者,甚至更好,以堆栈展开为例.我需要它用于HP-UX(Itanium)和 Linux. 查看linux / stacktrace.h 这是一个API参http://www.cs.cmu.edu/afs/cs/Web/People/tekkotsu/dox/
@H_618_10@
我需要在某些点获取我的C应用程序的堆栈信息.我已经阅读了文档并搜索了网络,但仍然无法弄清楚我是如何做到的.你能指出一个简单的过程解释吗?或者,甚至更好,以堆栈展开为例.我需要它用于HP-UX(Itanium)和 Linux.

解决方法

查看linux / stacktrace.h

这是一个API参

http://www.cs.cmu.edu/afs/cs/Web/People/tekkotsu/dox/StackTrace_8h.html

应该适用于所有Linux内核

这是C中的另一个例子

http://www.linuxjournal.com/article/6391

#include <stdio.h>
#include <signal.h>
#include <execinfo.h>

void show_stackframe() {
  void *trace[16];
  char **messages = (char **)NULL;
  int i,trace_size = 0;

  trace_size = BACktrace(trace,16);
  messages = BACktrace_symbols(trace,trace_sizE);
  printf("[bt] Execution path:\n");
  for (i=0; i<trace_size; ++i)
    printf("[bt] %s\n",messages[i]);
}


int func_low(int p1,int p2) {

  p1 = p1 - p2;
  show_stackframe();

  return 2*p1;
}

int func_high(int p1,int p2) {

  p1 = p1 + p2;
  show_stackframe();

  return 2*p1;
}


int test(int p1) {
  int res;

  if (p1<10)
    res = 5+func_low(p1,2*p1);
  else
    res = 5+func_high(p1,2*p1);
  return res;
}



int main() {

  printf("First call: %d\n\n",test(27));
  printf("Second call: %d\n",test(4));

}

大佬总结

以上是大佬教程为你收集整理的在HP-UX和Linux上进行堆栈展开全部内容,希望文章能够帮你解决在HP-UX和Linux上进行堆栈展开所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。