Uso de gdb, screen, vim y C

Estos son mis apuntes para ojearlos de vez en cuando, y si le sirve a alguien mas de ayuda, pues tanto mejor.

Utilizare el programa gdb para depurar programas escritos en C, para ello usare un sistema tipo Unix, en este caso un FreeBSD instalado en http://m-net.arbornet.org, para ello usare una de sus shells gratuitas, en bash concretamente. Para usar esta shell, la configuro en el archivo .bashrc con estas pocas lineas

export FIGNORE=”.o” # “Extensiones” a ignorar por el ESC-ESC
# Por seguridad, elegimos por defecto que al copiar, se nos pregunte si
# queremos sobreescribir el fichero destino. Lo mismo hacemos con mv y rm
alias cp=’cp -i’
alias mv=’mv -i’
alias rm=’rm -i’
#Los comentarios van hechos con el caracter #

Como editor de textos o de código usare el Vim, el cual esta en la mayoria de sistemas Unix/Linux aquí van algunas lineas para mi configuración en el archivo .vimrc.

set number
syntax on
set dictionary=/home/eb7bmo/diccionario
set nocompatible
set ruler

” Para redactar facilmente
iab _miweb http://cwmorse.eu5.org/
iab _miweb2 http://m-net.arbornet.org/~eb7bmo
iab _salu Muchas gracias y saludos.
iab _mail eb7bmo@hotmail.com
iab _lineac /*=============================*/

“Aquí los comentarios van con el carácter “(doble comilla)

Usare también el programa screen, para hacer la depuración y la edición de código mas fácil.

Todo lo expuesto aquí, también lo trabajo desde mi sistema Linux/Ubuntu 10.10 (maverick), pero teniendo la shell gratuita no nos hace falta tener un linux instalado.

Para empezar nos conectaremos con un telnet m-net.arbornet.org y cuando nos pida login introducimos “newuser”, sin las comillas claro esta. A partir de ahí, seguir los pasos hasta obtener la cuenta shell.

Ya tenemos todo lo que nos hace falta, un sistema, una shell, el depurador gdb, el editor vim, el programa screen y como no el compilador gcc. Al grano, editamos un código en lenguaje C para probar todo esto, y seria por ejemplo este:

#include <stdio.h>

main()
{
int Numero1;
int Numero2;
int resultado;
Numero1 = 20;
Numero2 = 100;
resultado = Numero2 + Numero2;
printf(“Su Multiplicacion es %d”, resultado);
printf(“\n\n”);
}

Una vez que estamos en el prompt de la shell escribimos “screen”, lo que hace que entremos en este programa, nos sale una pantalla de presentación y pulsamos enter, ya estamos en el, observamos que es una shell corriente, pero no es así, para salir podemos usar el comando “exit”. Una vez que estamos dentro, vamos a crear una división de pantalla, que es para lo que yo lo utilizo, pulsamos CONTROL + a, que nos pone en modo comando y después pulsamos S mayúscula, premio, ya tenemos las dos pantallas para trabajar. Pero si observamos bien, en la pantalla de abajo no tenemos nada, tranquilos, vamos a por ella. El cursor esta en la de arriba, pulsamos de nuevo CONTROL+a, y después la tela de tabulación, si esa, la de las dos flechitas. Ahora estamos en la ventana de abajo, pero solo esta el cursor parpadeando en la parte de arriba pues no hay nada en ella. Vamos a crear otra shell, para ello pasamos al modo comando, si eso, CONTROL+a, y a continuación pulsamos la letra c, de crear :) . Ya tenemos las dos shell abiertas y listas para trabajar en ellas. Para cambiar de una a otro solo tienes que pasar a modo comando y pulsar la tecla de tabulación

Vamos a crear el código en C de arriba, para ello abrimos el vim con el nombre del archivo, por ejemplo
“vim prueba.c”, a mi me gusta hacerlo en la shell superior. Ahora copiamos el código en este archivo y una vez hecho, lo compilamos desde el vim, ya sabéis, ESC y

:!gcc % -o prueba -g

el caracter % indica el nombre del archivo en uso, prueba.c, el -o seguido del nombre del ejecutable que deseamos crear, y por ultimo y mas importante el argumento -g que hace que el ejecutable tenga lo necesario para poderlo depurar con el potentisimo gdb.

Probamos el ejecutable, con ESC y

:!./prueba

Claro que esto sera si no se tenido fallos al escribir el código, pues en otro caso nos dará un aviso del error con linea en la que se ha producido en el tiempo de compilación. Si son programas cortos, se mira la linea y se accede a ella, pero si es un programa bien largo, la cosa sera mejor automatizarla, para ello usamos el comando :make desde el vim, pero antes creamos un simple makefile para este programa, y seria algo así…

prueba: prueba.c
gcc -o program prueba.c -g

Ahora, ya podemos compilarlo también desde vim pero con el comando:

:make

Si el código tiene errores nos lleva hasta la linea automáticamente, cosa que se agradece…

Una vez que se ha compilado sin errores nos vamos a la de abajo, CONTROL+a y tabulación, y ejecutamos el gdb con el parámetro “prueba”, una cosas así

gdb prueba

Ya podemos depurarlo si tiene errores en tiempo de ejecución, y también editar y volver a compilar y volverlo a correr, eso si, si la edición que hagamos en el código hace que las lineas aumenten o disminuyan, habrá que tener cuidado con los breakpoints que hayamos puesto, pues ahora quedan en otras lineas de programa.

Y eso es todo por el momento, en otra ocasión veré si hago alguna chuletilla sobre como usar los comandos del gdb con el programa anterior y otros.

Muchas gracias y saludos.

Posted in Programación | Leave a comment

Wifislax en USB

Antes de instalar el sistema, haremos dos particiones en el pendrive, una como FAT32 y la otra como ext3 para linux, esta ultima sera donde se guardaran los cambios o aplicaciones instaladas. Aunque yo primero instalé el sistema en el pendrive formateado en FAT32 entero, y despues con el Gparted reparticioné y cree la ext3, tu mismo…

Como es lógico formateamos las particiones y una vez instalado el sistema en el pendrive, se arraca el sistema desde el USB, para ello configurar la BIOS, y sino se puede cambiar en tu pc, usar para arrancar el “Plop Boot Manage” que es una buena opción. Una vez arrancado Wifislax, mirar como es reconocida la particion ext3 en el sistema, en mi caso es /dev/sda2 y sabiendo esto hay que ir a editar el syslinux.cfg,que se encuentra en el directorio /boot/syslinux  y añadiremos la siguiente entrada para tener persistencia en los cambios:

LABEL Wifislax vga=791 changes
MENU LABEL Run Wifislax vga=791 (Persistent Changes)
KERNEL /boot/vmlinuz
APPEND vga=791 max_loop=255 initrd=/boot/initrd.gz ramdisk_size=6666 root=/dev/ram0 rw changes=/dev/sda2

lo importante es configurar bien la opcion changes, suerte…

Posted in Linux | Leave a comment