Estou fazendo uma apresentação sobre depuração no Xcode e gostaria de obter mais informações sobre o uso eficiente do NSLog.
Em particular, tenho duas perguntas:
- existe uma maneira de NSLog facilmente o nome / número da linha do método atual?
- existe uma maneira de "desativar" todos os NSLogs facilmente antes de compilar o código de lançamento?
objective-c
cocoa
cocoa-touch
xcode
nslog
rédea
fonte
fonte
Respostas:
Aqui estão algumas macros úteis em torno do NSLog que eu uso muito:
A macro DLog é usada apenas para saída quando a variável DEBUG está definida (-DDEBUG nos sinalizadores C dos projetos para a confirmação de depuração).
ALog sempre produzirá texto (como o NSLog normal).
A saída (por exemplo, ALog (@ "Hello world")) ficará assim:
fonte
(@"%s [Line %d] " fmt)
faz com que ofmt
apêndice seja adicionado à cadeia de controle? Não vi essa sintaxe além da macro de depuração.Eu peguei
DLog
eALog
de cima, e adicionei oULog
que gera umaUIAlertView
mensagem.Para resumir:
DLog
será exibidoNSLog
apenas quando a variável DEBUG estiver configuradaALog
sempre sairá comoNSLog
ULog
mostrará oUIAlertView
único quando a variável DEBUG estiver configuradaIsto é o que parece:
+1 Diederik
fonte
DLog
declaração. Isso é útil porque, se você o fez, nas compilações da versão, nãoDLog
é compilado e você fica com um ponto-e-vírgula danificado no seu código. Isso não é um erro, mas pode gerar um aviso, dependendo das configurações, se seguir outro ponto e vírgula.Envia o nome do arquivo, o número da linha e o nome da função:
__FUNCTION__
em C ++ mostra o nome mutilado__PRETTY_FUNCTION__
mostra um bom nome da função, no cacau eles parecem iguais.Não sei ao certo qual é a maneira correta de desabilitar o NSLog.
E nenhuma saída de log apareceu, no entanto, não sei se isso tem efeitos colaterais.
fonte
Aqui está uma grande coleção de constantes de depuração que usamos. Aproveitar.
fonte
Há um novo truque que nenhuma resposta dá. Você pode usar em seu
printf
lugarNSLog
. Isso fornecerá um log limpo:Com
NSLog
você obtém coisas assim:Mas com
printf
você só tem:Use este código
fonte
Minha resposta a esta pergunta pode ajudar, parece que ela é semelhante à que Diederik inventou. Você também pode substituir a chamada
NSLog()
por uma instância estática de sua própria classe de log customizada, para adicionar um sinalizador de prioridade às mensagens de depuração / aviso / erro, enviar mensagens para um arquivo ou banco de dados, bem como para o console ou praticamente tudo o que você pode pensar.fonte
%s
especificador de formato que a Apple está tentando depreciar e evitou-Wcstring-format-directive
aviso Clang recentemente introduzido em 2015.Desabilitando todos os NSLogs, para alguém alérgico ao MACROS, aqui está algo que você pode compilar também:
E use-o quase como o NSLog:
Neste blog: https://whackylabs.com/logging/ios/2011/01/19/ios-moving-in-and-out-of-nslogs/
fonte
Para complementar as respostas acima, pode ser bastante útil usar um substituto para o NSLog em determinadas situações, especialmente durante a depuração. Por exemplo, livrar-se de todas as informações de nome e identificação de data e processo em cada linha pode tornar a saída mais legível e rápida de inicializar.
O link a seguir fornece um pouco de munição útil para tornar o registro simples muito mais agradável.
http://cocoaheads.byu.edu/wiki/a-different-nslog
fonte
É fácil alterar os NSLogs existentes para exibir o número da linha e a classe a partir da qual eles são chamados. Adicione uma linha de código ao seu arquivo de prefixo:
fonte
É simples, por exemplo
Saída: - [AppDelegate applicationWillEnterForeground:]
fonte
construindo sobre as respostas acima, eis o que plagiei e o que descobri. Também foi adicionado log de memória.
fonte
Nova adição ao DLog. Em vez de remover totalmente a depuração do aplicativo liberado, desative-o apenas. Quando o usuário tiver problemas, o que exigiria depuração, apenas diga como habilitar a depuração no aplicativo lançado e solicitar dados de log por email.
Versão curta: crie uma variável global (sim, solução lenta e simples) e modifique o DLog da seguinte forma:
Resposta mais longa no Jomnius iLessons iLearned: Como fazer log de depuração dinâmica no aplicativo liberado
fonte
Há algum tempo eu uso um site de macros adotado por vários acima. Meu foco é fazer logon no console, com ênfase na verbosidade controlada e filtrada ; se você não se importa com muitas linhas de log, mas deseja ativar e desativar lotes com facilidade, pode ser útil.
Primeiro, opcionalmente substituo o NSLog por printf, conforme descrito por @Rodrigo acima
Em seguida, ative ou desative o logon.
No bloco principal, defina várias categorias correspondentes aos módulos no seu aplicativo. Defina também um nível de registro acima do qual as chamadas de registro não serão chamadas. Em seguida, defina vários tipos de saída do NSLog
Assim, com as configurações atuais de kLOGIFcategory e kLOGIFdetailLTEQ, uma chamada como
irá imprimir, mas isso não
nem vai
Se você deseja substituir as configurações de uma chamada de log individual, use um nível negativo:
Acho que os poucos caracteres extras de digitação de cada linha valem o máximo que posso
Tenho certeza que muitos acharão isso um pouco exagerado, mas no caso de alguém achar que é adequado a seus propósitos ..
fonte