在HP-UX和Linux上进行堆栈展开
发布时间:2020-12-14 01:06:13 所属栏目:Linux 来源:网络整理
导读:我需要在某些点获取我的C应用程序的堆栈信息.我已经阅读了文档并搜索了网络,但仍然无法弄清楚我是如何做到的.你能指出一个简单的过程解释吗?或者,甚至更好,以堆栈展开为例.我需要它用于HP-UX(Itanium)和 Linux. 解决方法 查看linux / stacktrace.h 这是一个
我需要在某些点获取我的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] %sn",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: %dnn",test(27)); printf("Second call: %dn",test(4)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |