Eu tenho a saída de um Solaris pstack
em um arquivo principal. Não entendo como mapear os números no log para os parâmetros que estavam sendo usados pelas funções em questão no momento do segfault.
Parece haver mais números na saída do que a contagem de parâmetros para as chamadas de função. Quais números são os valores/endereços dos parâmetros?
O manual não ajuda em nada.
...
fffffffec993a8a8 sigacthandler (b, ffffffff7fffd5e0, ffffffff7fffd300, 14b7b0, fffffffec9a86000, b) + 5c
--- called from signal handler with signal 11 (SIGSEGV) ---
fffffffeba4422b0 XmMessageBoxGetChild (100400, 5, 5, 0, 118, fffffffeba62e000) + e4
000000010026a83c GetMessageDialog (101317440, 0, ffffffff7fffe130, 100420, 100400, 127a94) + 214
000000010026ab0c _XmtDisplayMessage (101317440, 0, 1000c9510, 1011927e5, ffffffff7fffe240, 101192780) + 278
000000010026b048 XmtDisplayInformationMsg (1000c9000, 1000c9, 100000, 2, 0, ffffffff7fffe2f8) + 44
00000001001573ec _smog_w_alarm_post_ack_actions (101314990, 101192760, 1003a0, 1009f4970, 101317440, 100000) + 100
000000010015819c __select_cb (101314990, ffffffff7fffe560, 101317440, 10113bfc0, 1000916d0, 10120c9d0) + 1b4
0000000100257a04 XmtCallCallback (101314990, 100257, ffffffff7fffe560, 101183530, 0, 0) + 3c4
...
As únicas duas funções de nosso aplicativo envolvidas são __select_cb()
e _smog_w_alarm_post_ack_actions()
, as outras são chamadas de Motif GUI/Widget Library. Mas, olhando para nossas definições de função:
static void __select_cb( Widget w, XtPointer call_data );
void _smog_w_alarm_post_ack_actions( Widget w, Alarm_Public_Data *alarm );
Há apenas dois argumentos para cada função. Espero que um dos Widget
ponteiros esteja incorreto ( provavelmente apontando para uma janela que já está fechada). Eu gostaria de saber qual (se houver) desses números mapeia para o valor/endereço real do parâmetro para ajudar na depuração do problema.
Os argumentos de função impressos por
pstack
são esforços de "melhor suposição", poispstack()
não é um depurador completo e, em alguns casos, mesmo um depurador completo não pode garantir a reprodução exata dos argumentos de uma função sem dados de depuração completos.pstack
O comando do Solaris é construído sobre alibproc.so
biblioteca , que fornece funções de controle de processo e informações. Consulte o código-fonte do Illumospstack
para saber como opstack
utilitário recupera a pilha de chamadas de processo com aPstack_iter()
função .Pela seção Notas :
Normalmente é possível inferir quais são os argumentos - você pode ver
sigacthandler (b, ...
logo acima--- called from signal handler with signal 11 (SIGSEGV) ---
. Nesse caso, hexadecimalb
é decimal11
-SIGSEGV
.Valores como
101314990
endereços de pilha prováveis e valores semelhantes affffffff7fffe560
endereços de pilha prováveis. Você pode usar opmap
utilitário para examinar o espaço de endereço do processo para verificar esses valores.Se você precisar de mais certeza, use um depurador completo e compile com símbolos de depuração.