注:
因为Android中只添加了部分GCC,
但<execinfo.h>却没有添加到Android中,所以这个方法不能应用到Android的C/C++代码中。
#include
<execinfo.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<unistd.h>
void
myfunc3(
void
)
{
int
j,
nptrs;
#define
SIZE 100
void
*buffer[100];
char
**strings;
nptrs
= backtrace(buffer, SIZE);
printf
(
"backtrace()
returned %d addresses\n"
,
nptrs);
strings
= backtrace_symbols(buffer, nptrs);
if
(strings
== NULL) {
perror
(
"backtrace_symbols"
);
exit
(EXIT_FAILURE);
}
for
(j
= 0; j < nptrs; j++)
printf
(
"%s\n"
,
strings[j]);
free
(strings);
}
static
void
myfunc2(
void
)
{
myfunc3();
}
void
myfunc(
int
ncalls)
{
if
(ncalls
> 1)
myfunc(ncalls
- 1);
else
myfunc2();
}
int
main(
int
argc,
char
*argv[])
{
if
(argc
!= 2) {
fprintf
(stderr,
"%s
num-calls\n"
,
argv[0]);
exit
(EXIT_FAILURE);
}
myfunc(
atoi
(argv[1]));
exit
(EXIT_SUCCESS);
}