notas:strace
Diferencias
Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
notas:strace [2011/01/14 13:47] – creado cayu | notas:strace [2020/04/17 01:23] – [Strace] cayu | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Strace ====== | ====== Strace ====== | ||
- | **strace** es una utilidad | + | **strace** es una utilidad |
Su uso más común consiste en arrancarlo junto al programa al que se le efectúa el trazado, el cual imprime una lista de llamadas al sistema que dicho programa ejecuta. Es útil para averiguar la causa del fallo de un programa determinado porque informa de situaciones en las que por ejemplo, el programa está intentando acceder a un fichero que no existe o que no tiene permiso de lectura. | Su uso más común consiste en arrancarlo junto al programa al que se le efectúa el trazado, el cual imprime una lista de llamadas al sistema que dicho programa ejecuta. Es útil para averiguar la causa del fallo de un programa determinado porque informa de situaciones en las que por ejemplo, el programa está intentando acceder a un fichero que no existe o que no tiene permiso de lectura. | ||
Línea 36: | Línea 36: | ||
**f** = hace un traceo del proceso y de sus forks | **f** = hace un traceo del proceso y de sus forks | ||
+ | |||
**p** = numero de PID (process ID) | **p** = numero de PID (process ID) | ||
Línea 51: | Línea 52: | ||
</ | </ | ||
+ | ===== Ejemplo de ejecución ===== | ||
+ | Podemos tomar este código : https:// | ||
+ | <code c> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | int socket_connect(char *host, in_port_t port){ | ||
+ | struct hostent *hp; | ||
+ | struct sockaddr_in addr; | ||
+ | int on = 1, sock; | ||
+ | |||
+ | if((hp = gethostbyname(host)) == NULL){ | ||
+ | herror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | bcopy(hp-> | ||
+ | addr.sin_port = htons(port); | ||
+ | addr.sin_family = AF_INET; | ||
+ | sock = socket(PF_INET, | ||
+ | setsockopt(sock, | ||
+ | |||
+ | if(sock == -1){ | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | if(connect(sock, | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | |||
+ | } | ||
+ | return sock; | ||
+ | } | ||
+ | |||
+ | #define BUFFER_SIZE 1024 | ||
+ | |||
+ | int main(int argc, char *argv[]){ | ||
+ | int fd; | ||
+ | char buffer[BUFFER_SIZE]; | ||
+ | |||
+ | if(argc < 3){ | ||
+ | fprintf(stderr, | ||
+ | exit(1); | ||
+ | } | ||
+ | |||
+ | fd = socket_connect(argv[1], | ||
+ | write(fd, "GET / | ||
+ | bzero(buffer, | ||
+ | |||
+ | while(read(fd, | ||
+ | fprintf(stderr, | ||
+ | bzero(buffer, | ||
+ | } | ||
+ | |||
+ | shutdown(fd, | ||
+ | close(fd); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | ===== Extras ===== | ||
+ | A veces también puede servirnos **ltrace**, que es una utilidad de depuración, |
notas/strace.txt · Última modificación: 2020/04/17 02:11 por cayu