我正在Linux上开发一个应用程序,我希望以特定频率回溯所有正在运行的线程.所以我的用户定义的信号处理程序SIGUSR1(对于所有线程)调用backtrace().
我在我的信号处理程序中发生崩溃(SIGSEGV),该处理程序源自backtrace()调用.我已经在大多数网站上指定了函数的正确参数. http://linux.die.net/man/3/backtrace.
在这种情况下,什么可能使backtrace()崩溃?
要添加更多详细信息:
是什么让我得出结论崩溃在内部回溯是下面的第14帧.onMySignal是信号处理程序SIGUSR1,它调用backtrace.
onMySignal的示例代码是(从backtrace的linux文档中复制)
pthread_mutex_lock( &sig_mutex );
int j, nptrs;
#define SIZE 100
void *buffer[100] = {NULL};//or void *buffer[100];
char **strings;
nptrs = backtrace(buffer, SIZE);
pthread_mutex_unlock( &sig_mutex );
Run Code Online (Sandbox Code Playgroud)
(gdb) where
#0 0x00000037bac0e9dd in raise () from
#1 0x00002aaabda936b2 in skgesigOSCrash () from
#2 0x00002aaabdd31705 in kpeDbgSignalHandler ()
#3 0x00002aaabda938c2 in skgesig_sigactionHandler ()
#4 <signal handler called>
#5 0x00000037ba030265 in raise () from
#6 0x00000037ba031d10 in abort () from
#7 0x00002b6cef82efd7 in os::abort(bool) () from
#8 0x00002b6cef98205d …Run Code Online (Sandbox Code Playgroud) 如何在AIX机器上查看正在运行的进程的所有线程的堆栈和状态.像linux上的pstack这样的命令或工具也应该有帮助..
我尝试过procstack,但没有帮助.它没有向我显示任何堆栈.虽然没有错误..
有任何想法吗..?
procstack是否需要与使用debig信息编译的进程相关的所有可执行文件和库?
谢谢.