Estou no osx 10.8.4 e instalei o gdb 7.5.1 com homebrew (motivação para obter um novo gdb com novos recursos, como --with-python etc ...)
Resumindo, quando executo a depuração em um projeto Eclipse c ++, recebo:
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Tenho seguido várias sugestões para assinatura de código
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- parcialmente http://www.noktec.be/archives/1251 com vários ajustes
Então eu fiz:
- Configure o certificado
- Assine o gdb -> codesign -s gdb-cert / usr / local / bin / gdb
Quando executo novamente a depuração no Eclipse, recebo o mesmo erro acima "(verifique se o gdb está codificado - consulte taskgated (8))".
Se eu restaurar o gdb para o gdb mais antigo (nas preferências do gdb do Eclipse) / usr / libexec / gdb / gdb-i386-apple-darwin, a depuração será executada conforme o esperado.
Alguma solução / sugestão por aí?
THX
Pelle
Respostas:
Este erro ocorre porque o OSX implementa uma política de acesso pid que requer uma assinatura digital para binários acessarem outros processos pids. Para habilitar o acesso do gdb a outros processos, devemos primeiro assinar o código do binário. Essa assinatura depende de um certificado específico, que o usuário deve criar e registrar no sistema.
Para criar um certificado de assinatura de código, abra o aplicativo Keychain Access. Escolha o menu Acesso às Chaves -> Assistente de Certificado -> Criar um Certificado ...
Escolha um nome para o certificado (por exemplo, gdb-cert), defina o Tipo de identidade como Raiz autoassinada, defina o Tipo de certificado como Assinatura de código e selecione Deixe-me substituir os padrões. Clique várias vezes em Continuar até chegar à tela Especificar um local para o certificado e defina as Chaves como Sistema.
Clique duas vezes no certificado, abra a seção Trust e defina Code Signing como Always Trust. Saia do aplicativo Keychain Access.
Reinicie o serviço taskgated e assine o binário.
fonte http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
No macOS 10.12 (Sierra) e posterior, você também deve
Use gdb 7.12.1 ou posterior Além disso, evite que o gdb use um shell para iniciar o programa a ser depurado. Você pode usar o seguinte comando para isso dentro do gdb:
Você também pode colocar este último comando em um arquivo chamado .gdbinit em seu diretório inicial, caso em que ele será aplicado automaticamente toda vez que você iniciar o gdb
FONTE: https://sourceware.org/gdb/wiki/BuildingOnDarwin
fonte
macOS Sierra
com certificados autoassinados.sudo killall taskgated
é a chave para resolver meu problemaFiz o gdb funcionar no OSX 10.9 sem codificar desta forma (descrito aqui ):
Instale o gdb com macports. (pode ser que você pode pular)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
altere a string de opção de
-s
para-sp
na linha 22, coluna 27.Reinicie o computador.
Use gdb. Se você instalou com portas mac, então você deve usar o
ggdb
comando. Ou criou um alias em seu arquivo de configuração:alias gdb='ggdb'
e use o comando 'gdb' então.
fonte
gdb
comosudo
. Isso parece um risco de segurança desnecessário.Fiz o upgrade para
gdb 8.3
e não consegui fazer as coisas funcionarem. Isso me ajudou:Onde o conteúdo de
gdb.xml
é:Encontrei essa solução aqui: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
Nota: Sem o direito, eu era capaz de executar
gdb
apenassudo
.fonte
error: The specified item could not be found in the keychain.
Eu tive o mesmo problema com o GDB. Estou correndo sob o
Mac OS X 10.8.5
nome de Mountain Lion. Estou usando a versão GDB7.7.1
.Compilei meu programa de teste com o seguinte comando:
Se eu inserir o comando
gdb sample.out
, recebo a mesma mensagem de erro criptografada:Essa mensagem de erro, entretanto, é uma pista falsa.
A solução que descobri que funcionou para mim foi simplesmente invocar o GDB usando a conta de superusuário:
Isso funciona bem para mim.
E a partir desse ponto eu poderia executar GDB example.out sem usar sudo.
Espero que isso ajude e funcione para outros. RSVP se isso não acontecer.
fonte
Nada disso funcionou para mim e eu tive que ir com uma longa corrida. Aqui está uma lista completa das etapas que executei para fazê-lo funcionar.
Infelizmente, o certificado do sistema me forneceu o
Unknown Error = -2,147,414,007
que é muito útil, então eu tive que ir com uma solução alternativa.KeyChain Assistant -> Create certificate ->
Escolha
login
,gdb-cert
,Code Signing
Copiar / mover o certificado para as chaves do sistema (digite a senha)
gdb-cert
) cliqueGet info
->Trust Always
startup-with-shell
Entre no console:
set startup-with-shell off
Lembre-se da configuração:
echo "set startup-with-shell off" >> ~/. gdbinit
Vá para
System Preferences
->Users & Groups
->Unlock it
->Login Options
->Network Account Server
->Join
->Unlock it
->Edit
(menu) ->Enable Root User
sudo killall taskgated
codesign -fs gdb-cert "$(which gdb)"
PS.
lldb
Acabo usando porque simplesmente funciona ( tutorial )fonte
Para quem usa Sierra 10.12.6 (e superior) e Homebrew,
/usr/local/bin/gdb
é um link simbólico para/usr/local/Cellar/gdb/8.0/bin/gdb
(ou qualquer versão, por exemplo8.0.1
).Você precisa codificar o link e o destino:
Ou, se você tiver
greadlink
(instalado viabrew install coreutils
):fonte
Eu me pergunto se a mudança global na resposta mais votada aqui tem algumas consequências não intencionais.
Em vez de habilitar a antiga convenção Tiger, o taskgated permite que o código assinado seja executado. Portanto, pode ser melhor apenas obter um certificado assinado para gdb, semelhante à resposta aqui .
Depois disso, consegui
sudo
usar o gdb. Se você precisar usar gdb sem sudo, talvez este link ajude , porém, isenção de responsabilidade, ainda não tentei porque usarsudo
é uma solução ok por enquanto.fonte
Isso pode não estar relacionado. Você pode usar lldb em macos em vez de gdb. Você não precisa deste incômodo para instalar o gdb.
lldb ( http://lldb.llvm.org ) já está instalado por padrão no High Sierra
fonte
Eu posso recomendar seguir esta essência: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md
Com truques para superar:
unknown error = -2,147,414,007
durante a criação do certificado descrito aqui: https://apple.stackexchange.com/a/309123Notas:
O caminho para gdb instalado como
homebrew
pacote deve ser algo como:/usr/local/Cellar/gdb/9.2/bin/gdb
E
csrutil enable --without debug
vai causar uma mensagem sobrerequesting unsupported configuration
, como aqui: https://totalfinder.binaryage.com/system-integrity-protectionTeste:
fonte
gdb 8.3;
Meu problema é o mesmo do cara acima, resolvido por
fonte