在HP-UX和Linux上进行堆栈展开

在HP-UX和Linux上进行堆栈展开,第1张

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1026149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存