5 votos

¿Cómo hacer que lldb funcione en M1 Big Sur?

Esto es en un M1 mini, corriendo 11.1 con un Xcode actualizado. (Todas las actualizaciones pendientes se han aplicado.) SIP no se ha desactivado (si es que se puede, en el M1).

Tenemos un programa que estamos utilizando para probar un mmap() fallo en nuestra aplicación que se está portando. Construimos el programa de prueba así:

cc -v -arch arm64 -m64 -Wl,-no_adhoc_codesign -o mapfail mapfail.c

Entonces, lo firmamos. Parece que está correctamente firmado:

@macarm[git:master]$ codesign -vvv mapfail
mapfail: valid on disk
mapfail: satisfies its Designated Requirement
@macarm[git:master]$ 

Hemos activado el modo de desarrollador en el sistema. También hemos añadido mi usuario al _developer grupo. Mi usuario no es un administrador, pero lo probé como tal y obtuve lo mismo.

Cuando ejecutamos el programa obtiene un fallo de segmentación (SIGSEGV), por lo que queremos depurarlo con lldb pero esto sucede:

@macarm[git:master]$ lldb mapfail
(lldb) target create "mapfail"
Current executable set to '/Users/layer/mapfail' (arm64).
(lldb) run
error: process exited with status -1 (attach failed ((os/kern) invalid argument))
(lldb) 

Las búsquedas al respecto no han arrojado ninguna información, ni siquiera en los foros de desarrolladores de Apple.

Más información. He probado un derecho añadido en codesign tiempo, pero eso no funcionó. Aquí está el derecho que utilicé:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
         <key>com.apple.security.get-task-allow</key>
         <true/>
</dict>
</plist>

¿Alguien ve algún problema con este XML?

1voto

Oskar Puntos 1242

Aquí está la respuesta pertinente de Apple sobre los derechos necesarios para adjuntar el llvm depurador a un proceso:

El derecho necesario en MacOS es com.apple.security.get-task-allow y sé cómo añadirlo en Xcode, pero aún no desde el compilador de línea de comandos. Puedes verificar lo mismo en tu Mac usando la aplicación de consola para mostrar los registros y luego reproducir el error. Entonces busca debugserver en la consola y verás que el depurador se inicia y luego falla al conectarse.

Aquí hay un error diferente si tratas de iniciar Calculator.app en el depurador - está endurecido y no tiene el derecho así que falla igual que tu aplicación - no se trata de la notarización o la firma de código, sino del derecho de depuración en el binario.

default 19:30:23.088087-0600    debugserver debugserver will use os_log for internal logging.
default 19:30:23.088429-0600    debugserver debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-1200.0.44
 for arm64.
default 19:30:23.088489-0600    debugserver Got a connection, waiting for process information for launching or attaching.
error   19:30:23.090348-0600    debugserver error: MachTask::TaskPortForProcessID task_for_pid failed: ::task_for_pid ( target_tport = 0x0103, pid = 17889, &task ) => err = 0x00000005 ((os/kern) failure)
default 19:30:23.090378-0600    debugserver 1 +0.000000 sec [45e2/0303]: error: ::task_for_pid ( target_tport = 0x0103, pid = 17889, &task ) => err = 0x00000005 ((os/kern) failure) err = ::task_for_pid ( target_tport = 0x0103, pid = 17889, &task ) => err = 0x00000005 ((os/kern) failure) (0x00000005
default 19:30:23.090329-0600    kernel  macOSTaskPolicy: (com.apple.debugserver) may not get the taskport of (Calculator) (pid: 17889): (Calculator) is hardened, (Calculator) doesn't have get-task-allow, (com.apple.debugserver) is a declared debugger

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X