Pergunta

No meu programa eu preciso para criar soquetes e aprisioná-los para escutar porta HTTP (80). O programa funciona bem quando eu executá-lo a partir da linha de comando com sudo, escalada permissões a raiz. Em execução no XCode dá uma 'permissão negada' erro na chamada para função de ligação (asio :: ip :: tcp :: aceitador :: bind ()).

Como posso fazer a depuração sob XCode?

Tudo feito em C ++ e boost.asio no Mac OS X 10.5 com o Xcode 3.1.2.

Foi útil?

Solução

Atualizar :. Para Xcode 4.5 e posterior, consulte esta resposta vez


A única maneira que eu estou ciente de que fazer o que você está pedindo é executar Xcode como root.

>> sudo /Developer/Applications/Xcode.app/Contents/MacOS/Xcode

Uma vez que você estiver executando como root, os processos de qualquer coisa lançados de Xcode irá também correr como root. Note, porém, que se você criar ou editar todos os arquivos, eles serão de propriedade da raiz, o que significa que você vai ter que chown-los antes que você possa editá-los como o seu usuário normal em primeiro lugar.

Eu adoraria uma maneira para Xcode para dizer "processo de Lançamento como root", mas, tanto quanto eu sei, não há tal funcionalidade está disponível.

Note que você também pode executar o aplicativo dentro da linha de comando depurador gdb para depurar seu aplicativo. Executar

>> sudo gdb /path/to/my/application

Em seguida, você poderia manter Xcode aberta, modificar à vontade, e depurar o seu programa dentro gdb. Isto é o que eu geralmente faço.

Editar : Os leitores do futuro: veja a resposta de Alexander Stavonin; ele fala sobre como fazer isso. Se você está bem com chaves SSH e permitindo que o usuário root em seu sistema, sua resposta é o caminho a percorrer.

Outras dicas

No Xcode 4.5 produtos -> Editar esquema : Olhe no Info separador em Debug Processo Como e escolher o root opção.

Xcode é capaz de executar o aplicativo de depuração como root. Para este efeito, os seguintes passos devem ser feitas:

  1. Ativar o usuário root para a máquina local.

    a. Executar “utilidade Directory” (/ System / Library / CoreServices / Diretório Utility.app)

    b. Escolha “Ativar Usuário Root” no menu Editar e insira a senha de root.

  2. Ativar loging remoto.

    a. Em Preferências do Sistema ... -> Sharing, verifique Login remoto. Esta opção ativa o demônio ssh.

  3. Criar chaves públicas / privadas SSH e copiar a chave pública no .ssh / authorized_keys pasta para o usuário root.

    a. terminal aberto na máquina local e tipo ssh-keygen -t rsa

    b. Aceite o local padrão e tipo de senha para a raiz.

    c. Faça login como su - raiz e criar ~ / .ssh diretório. (~ == / var / root)

    d. Copie a chave pública para o root: cat ~/.ssh/id_rsa.pub | ssh root@localhost "cat - >> ~/.ssh/authorized_keys"

    e. Verifique se está tudo ok. Digite ssh root@localhost. Não deve pedir a senha de root.

  4. Ativar depuração remota via ssh no Xcode.

    a. Selecione «Get Info» a partir de drop-down menu na «executáveis».

    b. Nas configurações de "depuração" verificar «depuração executável remotamente via ssh» e raiz put @ localhost como o «Connect to» info.

  5. Tudo deve estar ok agora ?

Do Blog

XCode não é mais compatível remoto depuração tornando a maioria destas respostas obsoletos.

Para depurar um programa como root agora é fácil. Sob o menu Product, use "Editar esquema de ..." e na sua "Run" esquemas painel "Info", selecione "processo de depuração como root". Você terá que autenticar uma vez.

A partir do Xcode 4.5 Eu tenho um erro estranho até que eu bastante Xcode e reiniciado.

Debug como raiz via SSH.

Editar Ativo executável -> Depuração -.> Debug executável remotamente via SSH

Se você quiser depurar um servidor web rodando na porta 443, você poderia, em vez executá-lo na porta 8443 em sua conta normal e, em seguida, faça um: sudo usuário ssh @ localhost -L 443: localhost: 8443 -N

Em seguida, você ainda pode entrar em contato com a sua aplicação na porta certa, mas têm a vantagem de executar o aplicativo como um usuário normal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top