Debido a que los contenedores amd64 que se iniciaron anteriormente en Apple Silicon se ejecutan en modo Qemu, GDB no se puede usar para depurar aplicaciones normalmente. Pero antes de que Docker anunciara que es compatible con Rosetta en Linux, esto nos permite usar Rosetta para iniciar contenedores de la arquitectura amd64. Luego, recientemente, un blogger descubrió que Rosetta tiene un servicio GDB incorporado, que se puede usar para depurar programas de arquitectura amd64 en contenedores de arquitectura amd64.
Primero necesitamos habilitar Rosetta en Linux en Docker
Luego use una imagen amd64 para iniciar un contenedor amd64
docker pull --platform=linux/amd64 ubuntu:20.04
docker run -it --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" --platform=linux/amd64 ubuntu:20.04 /bin/bash
Se recomienda usar gef como complemento de gdb y luego usar el siguiente comando para usar rosetta gdb para depurar el programa
ROSETTA_DEBUGSERVER_PORT=1234 a.out & gdb
(gdb) set architecture i386:x86-64
(gdb) file ./a.out
(gdb) target remote localhost:1234
(gdb) continue
lista de referencia
- https://sporks.space/2023/04/12/depuración-de-una-aplicación-x86-en-rosetta-para-linux/
- https://github.com/microsoft/vscode-cpptools/issues/10788
- https://qiita.com/chimpan/items/574ad8ad0ac142c71c37
- https://developer.apple.com/documentation/virtualization/running_intel_binaries_in_linux_vms_with_rosetta?language=objc