macos - keychain access mac español
¿Cómo generar volcados de núcleo en Mac OS X? (4)
Apple enumera varias formas de generar archivos de volcado de núcleo en su TN2124 o Mac OS X Debugging Magic .
Aquí hay un par de extractos:
Antes de Mac OS X 10.4, habilitaría los volcados de memoria en todo el sistema cambiando la línea "COREDUMPS = -NO-" en / etc / hostconfig a "COREDUMPS = -YES-" y luego reiniciando
Y
# BSH
$ ulimit -c unlimited
# CSH
% limit coredumpsize unlimited
Incluso puedes hacerlo programáticamente:
#include <sys/resource.h>
static bool EnableCoreDumps(void)
{
struct rlimit limit;
limit.rlim_cur = RLIM_INFINITY;
limit.rlim_max = RLIM_INFINITY;
return setrlimit(RLIMIT_CORE, &limit) == 0;
}
Parece que no puedo generar volcados de núcleo en Mac OS X 10.6.8.
$ ulimit -c unlimited
$ ./a.out
Hello world!
Segmentation fault
$ find ~/ -type f -name core
# ls -la /cores/
total 0
drwxrwxr-t@ 2 root admin 68 24 jui 2010 .
drwxrwxr-t 31 root admin 1122 17 oct 15:52 ..
Mi directorio actual, mi HOME y / cores / permanecen vacíos ...
De forma predeterminada, los bloqueos se informan en archivos .crash
que se pueden encontrar en /Library/Logs/DiagnosticReports
(en todo el sistema) y ~/Library/Logs/DiagnosticReports
(usuario). Estos archivos se pueden abrir utilizando la aplicación de la Consola , en Informes del usuario o del sistema . Los archivos .crash
están en formato de texto plano y deben incluir información relevante sobre el bloqueo.
Para activar los volcados de núcleo completos, asegúrese de que el directorio /cores
tenga permisos de escritura para el usuario actual (prueba mediante: touch /cores/test && rm /cores/test
). Además, asegúrese de no tener ningún límite en el tamaño de los archivos principales al:
ulimit -c unlimited
El nombre del archivo de volcado del núcleo está en formato: core
. PID
.
Si el directorio está oculto, puede mostrar los archivos ocultos por:
defaults write com.apple.finder AppleShowAllFiles TRUE
Puedes probarlo con los siguientes comandos:
sleep 100 &
killall -SIGSEGV sleep
que debería decir extra (core dumped)
, después del mensaje de falla de segmentación .
Los archivos de volcado del núcleo deben encontrarse por defecto en el directorio /cores
.
Ejemplo por comandos:
$ ulimit -c unlimited
$ sleep 100 &
$ killall -SIGSEGV sleep # Then press Enter few times till below message is shown
[1]+ Segmentation fault: 11 (core dumped) sleep 100
$ ls /cores
core.13652
$ lldb -c /cores/core.*
(lldb) target create --core "/cores/core.13652"
Core file ''/cores/core.13652'' (x86_64) was loaded.
(lldb) bt
* thread #1, stop reason = signal SIGSTOP
* frame #0: 0x00007fffa7d13fde libsystem_kernel.dylib`__semwait_signal + 10
frame #1: 0x00007fffa7c9ab92 libsystem_c.dylib`nanosleep + 199
frame #2: 0x000000010c090002 sleep`rpl_nanosleep + 128
Ver también: Nota técnica TN2118 - Kernel Core Dumps .
En Mac OS X Yosemite, puede habilitar el volcado de núcleo por proceso utilizando LLDB. Suponiendo que su ID de proceso es 51918
, ejecute lo siguiente desde bash:
$ lldb
(lldb) attach 51918
Process 51918 stopped
* thread #1: tid = 0x6bf50, 0x00007fff927c14de libsystem_kernel.dylib`mach_msg_trap + 10, queue = ''com.apple.main-thread'', stop reason = signal SIGSTOP
frame #0: 0x00007fff927c14de libsystem_kernel.dylib`mach_msg_trap + 10
libsystem_kernel.dylib`mach_msg_trap:
-> 0x7fff927c14de <+10>: retq
0x7fff927c14df <+11>: nop
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x7fff927c14e0 <+0>: movq %rcx, %r10
0x7fff927c14e3 <+3>: movl $0x1000020, %eax
Executable module set to "/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java".
Architecture set to: x86_64h-apple-macosx.
(lldb) expr long long * $limit = (long long *)malloc(16)
(lldb) expr $limit[0] = 0x7fffffffffffffff
(long long) $0 = 9223372036854775807
(lldb) expr $limit[1] = 0x7fffffffffffffff
(long long) $1 = 9223372036854775807
(lldb) expr (int)setrlimit(4, $limit)
(int) $2 = 0
(lldb) detach
Process 51918 detached
Si el proceso causa una falla de segmentación, ahora encontrará un núcleo en /cores
. Puede verificar si está enviando un SIGABRT a su proceso después de ejecutar lo anterior:
kill -ABRT 51918
Tenga en cuenta que la conexión al proceso que pertenece a la raíz no funcionará en macOSes recientes (El Capitán y superiores) de forma predeterminada debido a la Protección de integridad del sistema .
Puede generar archivos de volcado de núcleo en Mac Os X de esta manera:
Cree el archivo:
/etc/launchd.conf
, luego:echo "limit core unlimited" | sudo tee -a /etc/launchd.conf
Reinicie su Mac.
Y eso es todo, los archivos de volcado del núcleo se generan en el directorio /cores
. Tenga cuidado ya que los archivos de volcado del núcleo son archivos grandes, de modo que cuando termine de solucionar su código, elimínelos.