AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1498045
Accepted
ForDummies
ForDummies
Asked: 2023-12-25 03:51:00 +0800 CST2023-12-25 03:51:00 +0800 CST 2023-12-25 03:51:00 +0800 CST

Como identificar a entrada que causou a falha de segmentação de um programa?

  • 772

Tenho scripts que executam programas (que não fui autor) e alguns estão recebendo falhas de segurança em algumas entradas. Faço essas coisas em grandes lotes que duram até uma semana e gostaria de saber quais entradas estão desencadeando o problema. Do jeito que está, recebo uma notificação do Bash de que um determinado script meu sofreu uma falha de segurança. Mas o problema não está no script, está no programa de terceiros e em sua entrada. Se eu tivesse o nome da entrada, poderia trabalhar no problema.

A forma atual da chamada no meu script Bash é (por exemplo, programa 'autofix')

  for indata in base*.fix; do        
      autofix $indata >${indata/.fix/.stdout} &                                                                                               
  done

Como você pode ver, eles são iniciados em segundo plano e, no meu servidor robusto, pode haver cerca de 100 deles iniciados ao mesmo tempo, então não posso dizer qual deles falhou e não sou paciente o suficiente para tente todos os 100, um de cada vez, pois cada um pode levar uma hora. Capturar stderr não captura nada, então estou procurando outras ideias.

bash
  • 1 1 respostas
  • 57 Views

1 respostas

  • Voted
  1. Best Answer
    ForDummies
    2023-12-25T09:32:44+08:002023-12-25T09:32:44+08:00

    Encontrei uma solução em linha baseada apenas em brincar com coisas que eu já conhecia (ou pelo menos estava acostumado a encontrar) no Bash. Para testar e ilustrar, estou usando um pequeno programa em C que escrevi que apenas causa um SEGFAULT:

    // Cause a seg fault
    
    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
        char *zero = 0;
        *zero = 0;
        printf("Hey, how did I get away with this?");
        exit(EXIT_SUCCESS);
    }
    

    Então, depois de alguns testes (veja os comentários abaixo), acabei com este padrão simples no Bash (que poderia ser uma linha, mas estou apresentando uma forma mais legível):

       if ./segfault
       then
          echo strange success
       else
          echo this died with return code $?
       fi
    

    Este não morre por causa do SEGFAULT, apenas percebe. Portanto, a saída é "isto morreu" e não "sucesso estranho" ou uma falha total do processo.

    Esta abordagem mostra o código de erro que distingue entre SEGFAULT e outras formas de falha de processo, caso seja desejado.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve