
Problemas de computador. Todos nós os temos, mais cedo ou mais tarde. Conheça os meandros dos erros, afirmações, falhas e muito mais é vital para entender mais sobre o problema em questão. Saiba tudo sobre isso.
Que e um Afirmar?
Quando um desenvolvedor começa a escrever código, logo apresentará if
declarações nele. uma if
A declaração é usada sempre que é necessário testar uma determinada condição. Como um exemplo, alguém poderia escrever um pseudocódigo if
declaração do próximo caminho:
E se (nível de água > high_water_mark) então { raise_alert }
Em outras palavras, se o nível da água ultrapassar a marca alta, um alerta é gerado. Mas talvez o sensor de água esteja quebrado, por lo tanto actualizamos el código para que coincida:
E se (sensor_readout == nonsensical) então { raise_error fail }outro{ E se (nível de água > high_water_mark) então { raise_alert } }
Genial, ahora obtendremos un error y fallaremos la rutina si el sensor_readout no tiene sentido. Y solo si el valor demuestra ser sensato (debido a la else
cláusula, Em outras palavras, qué hacer en la situación opuesta), prossiga para verificar o nível_água com a marca_água alta.
Apesar disto, talvez alguém tenha desligado o sensor. Podemos continuar assim por um tempo. Podemos cobrir todos os cenários possíveis imagináveis e ainda perder alguns. Claro, poderíamos cobrir todas as situações possíveis com uma combinação else
cláusula e verificar se cada condição é comparada com outra, mas mesmo em tais casos, poderíamos ter esquecido algumas combinações de variáveis.
Mesmo se tivéssemos apenas um conjunto limitado de variáveis para trabalhar, o número de combinações possíveis em que um pacote de software pode ser encontrado é bastante numeroso. E o que é mais, esse tipo de if
Os testes condicionais ocorrem com bastante regularidade em quase todos os softwares.
Raciocinando um pouco mais sobre este dilema, nós rapidamente entendemos que nós (como desenvolvedores) poderíamos (como todos os humanos, cometemos erros) mais cedo ou mais tarde, introduza o código que permite que o software seja executado em território indefinido. A variável x é definida para um valor específico, a variável e é atribuída a outra, e não havia provisão para isso no código.
Esta é exatamente a situação em que uma declaração pode, até certo ponto, fornecer. Uma afirmação é outra condição (pense nisso como outro if
demonstração.) que afirma se há uma certa situação estranha / pouco comum / nao planejado / imprevisto e, em geral, lida com tal situação parando o programa em vez de continuar a executar em um estado indefinido / desconhecido.
Embora a rede que retornará o teste de ativos ainda esteja limitada à inteligência e habilidades do desenvolvedor que implementa a asserção, uma afirmação muitas vezes pode ser feita mais do que os limites limitados de if
declarações que testam o estado de várias variáveis, ou pode ser bem específico para evitar certas situações perigosas.
Como um exemplo, digamos que nosso pequeno sensor de água esteja montado em um tanque de chuva. Por isso, a água nunca deveria estar fervendo. Apesar disto, se nosso sensor de água tivesse um medidor de temperatura, nós poderíamos ter certeza, mesmo que isso nunca fosse acontecer / nunca deveria acontecer. Vamos adicionar uma afirmação ao pseudocódigo que começamos acima.
Em vez do ponto de ebulição (100 graus Celsius), buscaremos um máximo mais razoável de 70 graus Celsius, que ainda nunca deve ser alcançado quando se pensa em reter a água da chuva, ao menos, Em nossa opinião. Recuerde la palabra “opinión”, uma vez que se torna importante ao considerar a inteligência do desenvolvedor que implementa a reivindicação. (Mais sobre isso abaixo).
E se (sensor_readout == nonsensical) então { raise_error fail }outro{ assert (water_temp < 70.0){ raise_assert_message fail exit } E se (nível de água > high_water_mark) então { raise_alert } }
Escribimos la afirmación al revés. El código debe afirmar que la temperatura del agua es inferior a 70 grados centígrados. Sim, não é assim, irá executar o bloco de código, que irá gerar uma mensagem de asserção, e então o software irá travar e fechar.
As afirmações no código real são bastante semelhantes ao exemplo acima. Eles verificam se uma determinada situação se aplica ou não e, subseqüentemente, Pare (ou bloquear de forma controlada) o programa / software em questão.
Frequentemente, esses ativos são registrados nos arquivos de log do aplicativo ou até mesmo diretamente na saída da tela. Revise-os e / ou pesquise uma cópia da mensagem de afirmação exata em seu mecanismo de pesquisa favorito com frequência (se o erro foi encontrado anteriormente) o levará a um relatório de bug sobre isso.
Mensagens de afirmação costumam ser erros, mesmo que possam ser simplesmente erros no raciocínio do desenvolvedor. Depois de tudo, Quem diz dentro 1000 anos, a chuva não pode exceder 70 grados centígrados? (Espero que não!)
Uma mensagem de asserção é a saída apresentada pela asserção introduzida pelos desenvolvedores no código, Em outras palavras, a saída textual real gerada pelo software e conforme exibida na tela ou em registros. Como um exemplo, imagine que esta mensagem de asserção é exibida para o programa acima.
Afirmar: (water_temp < 70): (88 < 70): falso
Mesmo que pareça um pouco enigmático (assim como algumas mensagens de afirmação), olhar um pouco mais de perto nos faz perceber que na segunda parte, water_temp
foi trocado por 88 e que a saída é false
(Em outras palavras, a asserção water_temp <70 falló debido a que el agua estaba a 88 grados y, por eso, la aserción desencadenó el mensaje de aserción). Sí, puede resultar un poco confuso.
Armado com essas novas habilidades, depurar uma mensagem de asserção na próxima vez que você ver uma se torna muito mais fácil. Além disso, é possível tornar mais fácil entender exatamente o que estava errado quando o aplicativo foi interrompido..
Que e um Erro?
Erros de computador acontecem o tempo todo e por uma ampla variedade de razões. Eles ocorrem tanto no nível do desenvolvedor quanto no nível do usuário e em todas as etapas entre. Como um exemplo, um engenheiro de DevOps pode esquecer de incluir um arquivo necessário, ou o assinante de um pacote pode usar a chave errada para assinar o software, e assim por diante.
Em resumo, um erro de computador pode ser definido como um obstáculo com o hardware ou software do computador. Existem alguns exemplos de um bug mesmo no pseudocódigo limitado acima. Quando o sensor_readout == nonsensical
a condição é atendida, uma mensagem de erro é exibida.
Existem alguns erros que são mais comuns do que outros. Como um exemplo, usar o caminho ou nome de arquivo errado é um erro comum. Problemas relacionados à energia (como um exemplo, Bateria Fraca) eles também são erros bastante comuns.
Os erros são bastante separados e diferentes das mensagens de asserção, mesmo que a própria mensagem de asserção possa ser vista como um erro, Ou melhor, como uma situação indefinida que agora cobre a afirmação. Em geral, un error de computadora se traduce bastante bien en “Necesito un humano para arreglar este problema”.
Conforme os computadores ficam mais inteligentes e a IA progride, esperançosamente menos erros ocorrerão, mesmo que haja muito espaço para discussão e até mesmo para argumentos nessa área.
Que e um Choque?
Uma pane no computador pode assumir várias formas. Todos nós estamos familiarizados com as telas azuis do Microsoft Windows, que costumava ocorrer quando um aplicativo se comportava mal ou alguma parte central do sistema operacional ou hardware da máquina falha.
Apesar disto, a maioria das vezes, uma falha é um aplicativo de software que está em uma situação indefinida. Existem muitos cenários possíveis indefinidos deste tipo. É possível que um computador tenha tentado gravar em uma área da RAM que já estava em uso, o que a incomodou ou outra aplicação, ou talvez você se deparou com um cenário em que tentou dividir por zero (o que é impossível), ou alguma situação equivalente.
Muitos sistemas operacionais escreverão um arquivo de despejo de kernel (se assim for configurado), o que permite a um desenvolvedor e, as vezes, para um usuário final com alguma habilidade, depurar o problema em questão.
Se você quiser saber mais sobre como depurar quando as coisas dão errado, incluindo análise de arquivos de despejo de kernel, Você pode estar interessado em nosso post Debugging with GDB: Introdução.
Uma falha também pode ser o resultado de um aplicativo que está em uma situação indefinida, que não é tratada por meio de um erro (a maneira mais fácil de um aplicativo relatar algo errado) ou uma afirmação (um obstáculo mais profundo, originalmente excluído pelo desenvolvedor como impossível, mas ainda ocorre).
Ao mesmo tempo, note que uma compilação de programa para teste, Em outras palavras, com informações de depuração (incluindo asserções de nível de depuração apenas) embutido no resultado final binário, pode falhar ao produzir uma afirmação, Como é o caso, como um exemplo, com MySQL. servidor.
Final
Neste post, exploramos os conceitos de afirmações, erros e travamentos, bem como como eles estão relacionados. Analisamos em profundidade como seriam as declarações no código e como isso se relaciona a um exemplo da vida real de monitoramento do nível e da temperatura da água com um sensor de água.. Na próxima vez que você encontrar uma mensagem de afirmação, dê uma olhada mais de perto e aproveite a depuração.