Bir çalışma sürecine eklendiğinizi ve bir çekirdek dökümün incelenmediğini ve gdb'nin sembollere erişebileceğini varsayarsak, hangi sinyaller gibi bilgileri belirlemek için POSIX sinyal işleme işlevlerini çağırmanız gerekir (gdb aracılığıyla). engellenir ve kayıt sinyali işleyicileri nelerdir.
(gdb) call malloc(sizeof(struct sigaction))
$1 = (void *) 0x...
(gdb) call malloc(sizeof(struct sigaction))
$2 = (void *) 0x...
(gdb) call memset($2, 0, sizeof(struct sigaction))
...
(gdb) call sigaction(11, $2, $1)
$... = 0
(gdb) print *((struct sigaction *)$1)
<prints struct sigaction info>
Bu bilgi size adresini belirlemek için izin vermelidir:
Örneğin, aşağıdaki gibi bir şey bir işleyici sigaction işlevini kullanarak bir SIGSEGV == 11 sinyali için kayıtlı olup olmadığını belirlemek için kullanılabilir işleyici olarak hangi işlevin kullanıldığını belirlemek için bunu 'bilgi sembolü' komutuna iletebilirsiniz.
Hangi sinyallerin engellendiğini belirlemek için benzer işlemler gerçekleştirilebilir.
Ayrıca, özel GDB değişkeni $ _siginfo sizin için kullanılabilir. Daha fazla bilgi için buraya bakın: http://sourceware.org/gdb/onlinedocs/gdb/Signals.html
Benim tahminim, Apple/darwin hedefleri için $ _siginfo'nun mevcut olmamasına rağmen.
$ _siginfo gerçekten kullanılamıyor, ancak manuel yöntem bir çekicilik gibi çalışır (bir düzeltme ile - gdb, dönüş türlerini manuel olarak belirtmeyi gerektirir). Teşekkürler! – StasM
"malloc", "memset" ya da "sigaction" için ikinci argümana geçmeniz gerekmez, sadece 0 (NULL) 'i geçmeniz gerekir, ayrıca' gdb 'ile ilgili' __sigaction 'kullanmanız gerekebilir. * işlev * 'sigaction' yerine * struct *. Örneğin. call malloc (sizeof (struct sigaction)) 'bir kez, sonra' __sigaction (11,0, $ 1) '' derhal ara. – vladr