Académique Documents
Professionnel Documents
Culture Documents
Sumrio
Anjuta um breve tutorial..................................................................................................................2 Definio.....................................................................................................................................2 Recursos do Anjuta.....................................................................................................................3 Antes de comear........................................................................................................................4 O primeiro projeto...........................................................................................................................5 Incrementando o projeto............................................................................................................12 Invocando os poderes do Glade................................................................................................12 O esqueleto bsico do programa...............................................................................................14 Qual comando usar para compilar?...........................................................................................16 Compilando e rodando o projeto...................................................................................................17 Dividir para conquistar!............................................................................................................17 Criando os novos arquivos...................................................................................................18 Incluindo arquivos de cdigo no projeto..............................................................................19 Gerando os novos arquivos Makefile...................................................................................20 Dividir, dividir e dividir.......................................................................................................20 Onde eu errei?................................................................................................................................21 Marcando os pontos de interrupo..........................................................................................21 Informaes disponveis durante a depurao...........................................................................22 Controlando seu 'elefantinho'....................................................................................................24 Concluso.......................................................................................................................................25 Licena de Documentao Livre GNU..........................................................................................26 GNU Free Documentation License...........................................................................................26
Crditos
Copyright (c) 2005 - Welington Rodrigues Braga (http://gtk-br.cjb.net). dada permisso para copiar, distribuir e/ou modificar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; sem Sees Invariantes, sem Capa da Frente, e sem Textos da Quarta-Capa. Uma cpia da licena em est inclusa na seo entitulada Licena de Documentao Livre GNU.
Definio
Anjuta uma IDE (Integrated Development Environment Ambiente de desenvolvimento integrado) para desenvolvimento de aplicaes em C/C++. Ele foi concebido pelo Sr. Naba Kumar e escrito inteiramente com GTK+/GNOME. Sendo distribudo sob a licena GPL uma das ferramentas para desenvolvimento mais conhecidas dos programadores de aplicaes para GTK+ e GNOME em estaes com GNU/Linux. De forma grosseira o Anjuta uma interface grfica para diversas ferramentas que deveriam ser usadas via linha de comando pelo programador, tais como o make, gcc, gdb, cvs entre outros. A vantagem de us-lo ao invs daquelas ferramentas diretamente que este ltimo muito mais flexvel e simples do que usar todas aquelas ferramentas via linha de comando tornando assim o trabalho de desenvolvimento de um projeto muito mais produtivo e amigvel. Para download dos fontes ou maiores informaes sobre o projeto voc poder visitar o site oficial do projeto que encontra-se em http://www.anjuta.org. Nota: No momento em que este texto est sendo finalizado (junho/2005) j h uma nova verso saindo do forno (verso 2.0) e que trar muitas melhorias em relao a atual, mas como ela ainda estvel o suficiente para uso em ambiente de produo, todo este texto foi escrito com base na atual verso 1.2.3
Recursos do Anjuta
O Anjuta possui timos recursos que possibilitam o desenvolvimento de forma bem cmoda para o programador. Entre estes recursos eu fao questo de citar os seguintes:
Realce de sintaxe Este recurso simplesmente fantstico! Claro que ele existe em nove a cada dez editores de texto existente no GNU/Linux, mas no custa nada frisar que este recurso tambm se faz presente no nosso Anjuta. Para quem no conhece este recurso, este o que permite que as palavras reservadas de uma linguagem sejam apresentadas com cores diferentes para facilitar a leitura do cdigo. Autocompletar e Exibio de Sintaxe Assim como acontece no OpenOffice, Microsoft Word e at mesmo em algumas IDEs comerciais para desenvolvimento, durante a digitao do cdigo o Anjuta apresenta uma lista de funes, variveis etc que iniciam com as letras j digitadas e aps a digitao de todo nome da funo ele apresenta numa caixinha a sua sintaxe. Isso reduz enormemente o risco do programador obter um erro de compilao simplesmente por que esqueceu uma letra ao digitar o gigantesco no nome daquela funo gtk_alguma_coisa_em_algum_lugar()! Navegador de projeto Quem desenvolve programas organizados em vrios arquivos e nunca teve esse recurso no seu editor de textos vai se sentir feliz ao saber que agora ter todos os arquivos de fontes do seu projeto ao alcance de um clique. Este no um recurso exclusivo do Anjuta mas que, em conjunto com a abertura de mltiplos arquivos em abas, ajuda bastante e se voc nunca o usou, depois que comear a us-lo ficar se perguntando porque no usou antes. Ferramentas de navegao rpida Estas ferramentas so fantsticas. Com elas voc
poder navegar facilmente pelo seu cdigo escolhendo o nome da funo desejada em uma caixa de combinao ou simplesmente digitar o nmero da linha desejada ou ainda procurar por um texto enquanto ele est sendo digitado. Apesar destes recursos funcionarem apenas no arquivo atualmente em foco, voc poder usar o navegador de projeto comentado anteriormente para navegar entre as funes de todos os arquivos no seu projeto.
Numerao de linhas Este um recurso simples, porm indispensvel para trabalhar com programao. Imagine, por exemplo, no meio da compilao aparecer aquela frustrante mensagem acusando erro de sintaxe na linha 5432. Sem a numerao de linhas voc teria que contar as linhas uma a uma desde o incio do arquivo at este ponto! Integrao com o Glade Aqui est um recurso que torna o Anjuta muito poderoso para desenvolver aplicaes para o GTK+ e para o Gnome. Com uma simples combinao de teclas (ou usando o menu) voc poder abrir o arquivo .glade associado ao seu projeto dentro do Glade, alter-lo a vontade, salvar e voltar ao seu cdigo despreocupadamente. Vale aqui uma nota sobre isso, pois quem prefere deixar o Glade gerar o cdigo fonte ao invs de trabalhar com a libglade ter algumas dores de cabea, j que o cdigo gerado pelo Glade reescrito toda vez que voc altera o arquivo .glade e manda gerar o cdigo fonte. Como a maioria das aplicaes para GNOME atualmente usam libglade ao invs da gerao de cdigo para interface, ento voc pode us-la despreocupadamente. Integrao com o Devhelp e outras ferramentas de ajuda O programador que nunca precisou abrir abrir o manual da sua linguagem de programao ou algum outro recurso de ajuda que remova a tecla F1 do seu teclado e a atire em mim! O Devhelp o navegador padro para ajuda de desenvolvimento no GNOME. A partir dele o programador tem acesso a ajuda para todas as principais APIs, bibliotecas e programas que sejam necessrios e se por acaso faltar alguma basta abrir a pgina do projeto Lidn (http://lidn.sourceforge.net) e baixar o documento apropriado para integrar ao Devhelp. Terminal embutido Este um recurso que apesar de no ser to essencial traz suas vantagens. possvel ter um terminal aberto a todo instante dentro de uma aba no seu Anjuta para emisso de comandos que por ventura precisem ser executados rapidamente. Construtor de classes Se voc gosta de programar em C++ com recursos de orientao a objetos ento o Anjuta pode te ajudar a construir as classes do seu projeto com este assistente que apesar de ser bastante rudimentar j facilita um pouco o seu trabalho, principalmente na questo de dividir cada classe em um arquivo separado.
Estes recurso apresentados acima foram apenas alguns dos muitos que esta poderosa ferramenta possui. Seria muito entediante, tanto pra mim quanto pra voc, continuar escrevendo/lendo sobre todos eles, por isso os demais recursos sero comentados ao longo deste tutorial, quando houver necessidade.
Antes de comear
Daqui pra adiante eu vou considerar que o Anjuta j esteja instalado e todas as bibliotecas necessrias estejam instaladas para desenvolvimento de aplicaes com o GTK+, Glade e GNOME. Se voc no tiver estes pacotes instalados dever instal-los e se no souber como instalar, recomendo parar a leitura aqui e procurar ajuda em sites e fruns apropriados para saber como fazer isso. Antes que algum critique o fato de eu no explicar o procedimento de instalao eu vou me justificar: Cada distribuio GNU/Linux possui um modo diferente de instalao de pacotes e resoluo de dependncias. No seria muito prtico escrever cada um deles e nem justo com todas as excelentes distros existentes por ai se explicasse o mtodo para uma ou outra. Eu particularmente uso o GNU/Debian, onde posso instalar todos os pacotes de dependncias
usando a ferramenta Synaptic (http://www.nongnu.org/synaptic) que tambm est disponvel em distros como o Kurumin, Kalango, Knoppix, Ubuntu, Conectiva entre outras. Caso precise de ajuda voc poder recorrer at mesmo ao frum do nosso site (http://www.gtk-br.cjb.net). Vale aqui destacar tambm que na maioria das vezes a instalao do Anjuta simples e por isso bem sucedida, mas o usurio ter problemas para compilar projetos que necessitem de alguma biblioteca que no foi instalada por no ser considerada como uma dependncia. Como sugesto para evitar transtornos, se voc tiver um bom espao disponvel em disco instale todos os pacotes que contenham a terminao dev (ou devel, em algumas distros), por exemplo se voc pretende desenvolver aplicaes que usem o Mesa/OpenGL precisar do pacote libgtkgl para execuo das aplicaes e do pacote libtkgl-dev para compilar as aplicaes. Talvez a sua distro use uma nomenclatura diferente para especificar os pacotes e desenvolvimento, informe-se com algum que j tenha experincia com ela. Uma outra forma de comear seria instalando os meta-pacotes1 de desenvolvimento para gnome da sua distro, no caso do Debian, com Gnome 2.8, isso corresponde aos pacotes gnome-devel e gnome-core-devel, algumas outras distros usam o conceito de tarefas cuja a finalidade a mesma.
O primeiro projeto
A ttulo de primeiro projeto ns iremos criar um tradicional hello world que apenas apresenta uma Janela do Gnome na nossa tela. Depois ns iremos brincar com alguns dos recursos dos Anjuta sem nos prendermos aos recursos da linguagem C e das bibliotecas que forem usadas, j que este no o objetivo deste documento. A primeira coisa a fazer iniciar o Anjuta. Se voc usa o GNOME ele encontra-se na pasta Desenvolvimento do menu Aplicaes, mas ele pode ser chamado digitando-se o comando anjuta a partir de um terminal ou a caixa de entrada do comando Executar Aplicao. Assim que o Anjuta estiver rodando voc ver uma janela como a da Ilustrao 3
1 Meta-pacote um tipo de pacote especial que ao invs de possuir os arquivos para instalar algum programa, biblioteca ou documentao ele possui apenas indicao de dependncias de maneira que ao ser instalado ele fora a instalao de todos os pacotes relacionados a ele. Por exemplo o meta-pacote gnome no possui todo o sistema Gnome, mas apenas as informaes de dependncias que apontam para os pacotes reais. Algumas distros ao invs deste conceito usam o conceito de tarefas onde ao instalar uma tarefa todos os pacotes relacionados a ela sero instalados.
Assistente de Aplicao por aqui que voc comea uma aplicao de forma bem fcil e agradvel. Usando o assistente de aplicao voc poder escolher o tipo da aplicao, definir algumas propriedades e depois comear a programar. Esta opo equivale ao comando Novo Projeto do menu Arquivo, portanto se voc deseja usar esta opo mas esta caixa de dilogo no foi exibida ento voc poder usar este comando. Assistente de importao Este um recurso interessante que apesar de no ser 100% eficaz, quando funciona, facilita bastante o trabalho de importar um projeto feito em outro ambiente para o Anjuta. Ele tambm til para transformar aqueles seus projetos que voc gerencia braalmente em projetos gerenciveis pelo Anjuta. Esta opo tambm est disponvel pelo comando Importar Projeto do menu Arquivo. Abrir Projeto Com esta opo voc poder abrir um dos seus projetos salvos para continuar o trabalho. A ao equivalente a esta a executada pelo comando Abrir Projeto do menu Arquivo. Abrir ltimo projeto utilizado O nome j diz tudo! Pra que escolher a opo Abrir Projeto e ter que escolher o ltimo projeto se voc pode fazer isso com um nico clique?! Esta opo tambm est acessvel pelo menu Arquivo onde existe uma lista com os ltimos projetos sob a opo Projetos Recentes. Abrir Arquivo muito comum criarmos algum programinha simples em um nico arquivo s para resolver algum problema e no se quer gerar um projeto no Anjuta que depende de algumas dezenas de arquivos e bibliotecas. Neste caso voc poder simplesmente
abrir o seu arquivo .c e edit-lo com todo o conforto que o Anjuta oferece. Voc poder abrir tambm algum arquivo de anotaes ou com dados que sero usados pela sua aplicao. Isso equivale ao comando Abrir do menu Arquivo.
Novo Arquivo Seguindo a mesma idia do exemplo citado para opo abrir Arquivo, voc poder usar esta opo para criar um pequeno arquivo de programa ou dados para sua aplicao. Isso equivale ao comando Novo do menu Arquivo.
Ns escolheremos a opo Assistente de Aplicao para comearmos um novo projeto. Este assistente bem simples e possui apenas alguns passos essenciais para gerar a nossa aplicao. Todas as demais opes do projeto devero (se necessrio) ser alteradas a partir do comando Configurar Projeto do menu Projeto. As telas a seguir so do nosso assistente. Acompanhe passo-a-passo como criar um novo projeto: A primeira tela (Ilustrao 2) apenas uma pgina introdutria com uma breve explicao e a nica coisa a ser feita aqui clicar no boto Avanar.
A prxima tela (Ilustrao 4) permite escolher o tipo de projeto a ser criado. Para efeitos prticos no nosso tutorial vamos usar a opo Projeto libGlade 2.0 que nos permite criar aplicaes grficas para o Gnome usando esta biblioteca. Lembre-se que para que esta opo seja usada com sucesso todas as bibliotecas de desenvolvimento para o Glade, libGlade e Gnome devem estar instaladas no seu sistema, este aviso vlido para todas as outras opes em que os pacotes de desenvolvimento relacionados devem estar instalados. Nesta tela ns simplesmente escolhemos a opo desejada e clicamos em Avanar.
A terceira tela (Ilustrao 5) destinada a informar dados do programa, tais como o nome do projeto (que no deve possuir espaos), o nmero de verso (o padro comear com 0.1), o nome do autor (aqui voc pe o seu nome), alvo do projeto (o nome do arquivo executvel definido automaticamente de acordo com o nome do projeto). A linguagem de programao pode ser C, C++ ou ambos, como ns escolhemos o projeto para a libGlade aqui ns devemos escolher a linguagem C, j que para programarmos em C++ com a libGlade seria necessria a biblioteca libglademm e que o Anjuta ainda no suporta completamente. O tipo de alvo poder ser um alvo executvel (programa comum), ou uma biblioteca (esttica ou dinmica). Preencha esta tela conforme desejado e clique em Avanar.
A prxima tela (Ilustrao 7) para passar algumas opes adicionais sua nova aplicao tais como incluir uma cpia resumida da licena GPL em todos os arquivos (isso recomendvel se voc pretende criar uma aplicao sob esta licena), Habilitar o suporte a gettext indispensvel se voc pretende fazer uma aplicao j prevendo o sucesso e que futuramente ser internacionalizada. A opo de gerar o cdigo fonte usando o Glade ou glademm est disponvel apenas para projetos baseados diretamente na GTK o que permitir o Anjuta aproveitar o cdigo fonte gerado pelo Glade. As opes Nome da Entrada, Comentrio, Grupo, Usar terminal e cone so usadas para criar o arquivo seu_projeto.desktop que um atalho para o seu programa e que ser criado dentro do grupo especificado, quando o usurio der um make install na sua aplicao. Defina as opes como desejado e clique em Avanar.
10
A prxima tela (Ilustrao 8) apresenta um resumo das opes que voc escolheu. Se estiver tudo conforme voc desejava que estivesse ento clique no boto Aplicar para que o Anjuta finalize o projeto e gere todos os arquivos necessrios.
Se tudo correu bem as ltimas linhas que se pode ver na ficha Build da janela de mensagens (veja a na pgina ) deve ser algo similar ao mostrado abaixo: Agora digite 'make' para compilar o pacote Terminado ... Sucesso
11
Estas mensagens foram geradas pelos programas automake e autoconf que so responsveis por criar os arquivos makefile e outros arquivos auxiliares para facilitar a compilao. Dependendo da verso destes pacotes, que estiverem instalados em sua mquina, a mensagem ser um pouco diferente. Uma vez que j temos a base do projeto pronta, ns podemos compilar o nosso projeto ... ou a partir do terminal (voc pode clicar na ficha terminal da janela de mensagens), ou usando o comando Compilar Tudo do menu Compilar [SHIFT-F11]. Ao concluir a compilao ns teremos um prottipo do nosso projeto j funcional e para v-lo basta usar o comando Executar do menu Compilar [F3]. Se tudo realmente correu bem voc ter a janela da sua aplicao e uma janela de terminal, conforme a ilustrao a seguir:
NOTA: Sempre que iniciarmos a nossa aplicao de dentro do Anjuta, isto , usando o comando Executar do menu Compilar ou a tecla [F3] a janela do terminal ser aberta atrs de nossa aplicao para que possamos ver as mensagens de depurao; mas fique despreocupado pois se voc executar a aplicao de fora da IDE este terminal no ser aberto. Para fecharmos a nossa aplicao voc deve fechar a janela de terminal (lembre-se que a janela da aplicao ainda no possui o evento gtk_quit() associado ao clique do boto fechar). O bsico isso e certamente que a maioria das pessoas que leram ou esto lendo este documento sabem chegar at aqui, mas no sabe como prosseguir e por isso que eu pretendo me alongar detalhando alguns dos vrios recursos do Anjuta.
12
At aqui o nosso projeto est bastante genrico e qualquer programa usando a libGlade, no Anjuta comear desta forma. Daqui pra frente depende do que o programador espera desenvolver. No nosso caso faremos uma desprezvel calculadora com apenas as quatro operaes bsicas. A minha proposta no produzir nenhuma super-calculadora e nem mesmo igual ou comparvel as calculadoras do Gnome, KDE ou Windows. Mas apenas um aplicativo onde possamos testar o potencial do nosso Anjuta. Seu funcionamento ser o seguinte: Teremos duas caixas de entrada, onde digitaremos os valores usados nos clculos, ao clicarmos em um dos botes de operao teremos o resultado exibido em um rtulo. Apenas isso e nada mais. Vamos l ento!
Observe que ela bem simples e por isso dispensa muitos comentrios sobre a sua elaborao, mas para ajudar aos marinheiros de primeira viagem ai vai algumas dicas: 1. Use GtkVBox (Caixa Vertical) com 4 linhas para organizar melhor os componentes. 2. Inclua duas GtkEntry (Entrada de Texto), uma para cada valor da nossa operao 3. Ao invs de quatro botes use apenas uma GtkHButtonBox (Caixa de botes Horizontal) com 4 botes. 4. Insira uma GtkLabel (etiqueta, ou rtulo) As nicas propriedades alteradas aqui foram as propriedades etiqueta de cada um botes para que representassem as quatro operaes bsicas. Alm das propriedades foram definidos os seguintes sinais e manipuladores:
Resumindo a tabela: Ao clicarmos no boto fechar da janela (Window1) o sinal destroy ocorrido o que chama imediatamente a funo gtk_main_quit() como manipulador e que encerra a nossa aplicao. E ao clicarmos em qualquer um dos outros botes o sinal clicked ocorre chamando cada um dos seus respectivos manipuladores on_buttonN_clicked(). Com exceo do manipulador gtk_main_quit(), que uma funo interna do GTK, os demais manipuladores devero ser programados em funes com estes nomes a partir do Anjuta (adiante ns veremos como) . Por hora apenas salve as alteraes no Glade, clicando em Salvar e feche-o. Para ver como o projeto est basta executar a aplicao usando o comando Executar do menu Compilar ou a tecla [F3], como j dito antes. Lembrando apenas que o terminal surgir por trs para que possamos depurar nossa aplicao. Se tudo correr bem a nossa aplicao dever aparecer na tela (lembre-se que a janela criada em tempo de execuo e por isso alteraes feitas pelo Glade no necessitam de uma recompilao do projeto), mas claro que o nico boto que funciona o X para fechar a janela, j que os demais devero ser programados. Agora observe a sada no terminal de depurao: EXECUTING: /home/welrbraga/Projetos/HelloWorldAnjuta/src/helloworldanjuta ---------------------------------------------(helloworldanjuta:3584): libglade-WARNING **: could not find signal handler 'on_button2_clicked'. (helloworldanjuta:3584): libglade-WARNING **: could not find signal handler 'on_button1_clicked'. (helloworldanjuta:3584): libglade-WARNING **: could not find signal handler 'on_button4_clicked'. (helloworldanjuta:3584): libglade-WARNING **: could not find signal handler 'on_button3_clicked'. Veja que no nosso terminal temos quatro avisos da libGlade acusando a ausncia dos manipuladores 'on_buttonX_clicked'. Acredito que a partir daqui voc, que ainda estava em dvida, j pode ver uma utilidade para o terminal que se abre durante a execuo do projeto no ambiente do Anjuta. Sempre que tivermos mensagens de erro ou aviso a serem exibidas, em tempo de execuo, elas sero apresentadas no terminal. Vale deixar aqui uma dica que se voc
14
precisar que o seu programa emita mensagens de depurao pode-se fazer isso com as funes g_message(), g_debug, g_critical, g_error() e g_warning(); consulte a documentao destas funes, na biblioteca glib, pois elas podem ajudar enormemente a depurar seus programas sem que voc tenha o trabalho de construir uma janelinha s pra apresentar mensagens de erros durante a fase de testes, pra saber o que est acontecendo.
*/ */ */ */
Observe que na primeira linha includa est a declarao para nossa estrutura XML, o motivo disso que ns vamos usar com certa freqncia o contedo dessa varivel para encontrarmos os objetos a serem manipulados, ento para que tudo funcione direitinho comente a declarao dentro da funo main(). Feito isso agora ns vamos colocar o corpo das funes no final do nosso arquivo.
gdouble get_valor (gchar * meu_widget) /* L o valor do widget */ { /* Pega o widget especificado */ GtkWidget *wid = glade_xml_get_widget (xml, meu_widget); /* Pega o tipo do widget */ gchar *wid_tipo = g_strdup (G_OBJECT_TYPE_NAME (wid)); /* Retorno do valor nos objetos const gchar *retorno = NULL; */
/* Verifica se o widget uma caixa de entrada */ if (!strncmp (wid_tipo, "GtkEntry", 8)) { retorno = gtk_entry_get_text (GTK_ENTRY (wid)); } else
15
16
Se voc digitar tudo direitinho, ou simplesmente copiar e colar, ento tudo dever funcionar direitinho. Agora ns s precisamos compilar o projeto para testar. Observe que as funes so bem simples, no possuindo qualquer espcie de crtica aos dados entrados. Apesar disto no ser recomendvel para um programa profissional elas atendero bem aos nossos propsitos que de entender o funcionamento do Anjuta e como as funes possuem comentrios entre as linhas de cdigo tambm no irei falar sobre o funcionamento delas, bastando apenas que o leitor de uma lida no cdigo fonte para entender seu funcionamento.
17
Comando Compilar [F11]: Este comando gera os arquivos .o e liga-os com as bibliotecas necessrias para gerar o nosso arquivo executvel. Quando estamos lidando com um projeto pequeno podemos seguramente descartar as outras duas opes de compilao citadas antes e usar apenas este, assim agilizando o trabalho, mas quando o projeto envolve dezenas ou centenas de arquivos e bibliotecas ai a coisa muda de figura, pois se usar este comando diretamente voc poder esperar at vrios minutos talvez at chegando a algumas horas esperando que todos os arquivos sejam recompilados, por isso no recomendo que voc que est iniciando pegue esse mal vcio. Comando Compilar Tudo [SHIF]+[F11]: Este comando similar ao comando explicado acima, mas com o diferencial de que enquanto aquele comando anterior compila apenas o que est no diretrio de cdigo fonte este desce at o diretrio raiz do projeto e compila todos os arquivos a partir da gerando assim um executvel completo. Caso voc tenha arquivos com cdigo fonte em mais de um diretrio ser interessante usar esta opo para compilar realmente todo o seu projeto. Isso comum no caso de se estar desenvolvendo um programa modular, onde voc ter um diretrio para cada mdulo. Por exemplo um diretrio com o mdulo de controle de clientes outro com o mdulo de controle de estoque etc. Este comando equivale ao famigerado make all j conhecido de muitos leitores que necessitam compilar programas de terceiros. Comando Compilar Distribuio: Com este comando voc poder criar um pacote .tgz contendo o cdigo fonte do seu projeto.
18
que no haveria necessidade de estar fazendo um tutorial sobre o Anjuta. Mas ainda bem que o Sr. Naba Kumar foi iluminado ao desenvolver esta aplicao, por isso veremos detalhadamente como organizar a sua aplicao a partir daqui!
Aps digitar as informaes clique em OK para que uma nova aba seja criada na rea de trabalho do Anjuta. Ns realizamos este procedimento duas vezes: Uma para criar o arquivo .c, onde ter todo o cdigo das nossas funes e outra vez para criar o arquivo .h onde ter os prottipos, diretivas, macros e variveis globais do nosso projeto. No menu Tipo de Arquivo da janela Novo arquivo isso equivaleria a escolher C Source File e em seguida C C++ Header File. Uma vez que j temos os arquivos vazios ns devemos recortar o cdigo dos prottipos (contedo do Quadro 1) e cola-lo no arquivo .h e em seguida fazer o mesmo com o corpo das funes (contedo do Quadro 2) no arquivo .c. importante frisar aqui que todo arquivo .c no nosso projeto deve permitir ser compilado sem dependncias implcitas. Isso significa que o nosso arquivo funcoes.c dever possuir uma diretiva include para cada uma das suas dependncias. Em outras palavras ns devemos incluir as linhas a seguir logo no incio do arquivo funcoes.c.
#include <gnome.h> #include <glade/glade.h> #include "include/funcoes.h"
Quadro 3 - incluses do arquivo funcoes.c
Com isso todas as funes do GTK+/Gnome e Glade sero encontradas nas duas primeiras
19
Aps colar o contedo de cada arquivo salve-os mas observando o seguinte: Os novos arquivos .h e .c ainda no pertencem ao nosso projeto, por isso devem ser salvos em algum lugar fora do diretrio de projeto (eu costumo salv-los em /tmp). Depois eles sero adicionados ao projeto. Vale aqui uma nota de que se mantivermos tudo em um arquivo .h o programa at ser compilado sem muitas complicaes mas isso acarretar no fato de que no poderemos compilar cada arquivo .o (arquivo-objeto) em separado fazendo com que todo o nosso trabalho de separar o projeto em pequenos arquivos sejam em vo, uma vez que no permitido compilar arquivos .h.
Assim que voc clicar o boto OK a janela da Ilustrao 13 ser exibida e voc precisar apenas responder SIM. para que o arquivo seja copiado para a pasta adequada.
20
Feito isso repita o mesmo procedimento descrito, mas desta vez usando a opo Arquivo de Cdigo Fonte, para importar o arquivo .c.
21
3 Ainda assim se compilarmos o projeto teremos um erro de compilao, pois as funes get_valor() e set_valor() no sero encontradas. Por que elas no sero encontradas? Simples, apesar de termos salvo os arquivos nos respectivos diretrios include e src eles ainda no fazem parte do projeto, ou seja, ainda no esto declarados nos arquivos makefile. Para incluirmos no projeto temos que usar o comando Adicionar Arquivo do menu Projeto, uma vez para cada arquivo (o arquivo de cdigo .c e em seguida o arquivo de header .h). Depois de feito isso, ai sim poderemos compilar o projeto que tudo ser compilado corretamente.
Onde eu errei?
A pior tarefa durante o processo de desenvolvimento de uma aplicao a depurao. O Anjuta possui uma integrao muita boa com o GDB (GNU Debugger) o que permite usar todo o poder desta ferramenta sem precisarmos sair do ambiente do Anjuta. A depurao constitui-se basicamente em seguir o processamento de uma aplicao passo-a-passo para acompanharmos como as variveis esto se alterando ao longo do programa. Imagine a seguinte situao: Sua aplicao tem uma funo que recebe um valor em formato gchar para internamente converter em gint e s em seguida calcular o fatorial deste valor. S que ao exibir o resultado o que se tem lixo, ou seja, um valor que no tem nada a ver com o esperado. Pode existir aqui vrias hipteses para este problema, como por exemplo voc est calculando o fatorial de forma errada, ou a rotina de converso de gchar para gint pode estar funcionando mal etc. Mas como descobrir o problema? Com a sesso de depurao aberta ns poderemos executar o programa e faze-lo suspender na ltima linha da funo, por exemplo, e com isso analisar todas as variveis locais em busca de uma atribuio invlida. Apesar do nosso programa no conter erros ns vamos executar a depurao para ver como usar este recurso para depurar um programa. A primeira ao a se tomar para usarmos o depurador GDB no Anjuta iniciar a sesso de depurao a partir do menu Depurar com o comando Iniciar Depurador ou teclar [SHIFT]+ [F12]. Ao fazer isso na aba Debug da nossa janela de mensagens aparecer a mensagem: O depurador est preparado. Isso significa que o Anjuta conseguiu carregar o servidor do GDB que ser responsvel por processar as nossas solicitaes de depurao. Agora ns poderemos acompanhar a execuo do nosso cdigo passo-a-passo e quando terminarmos basta usar o comando Parar o Depurador do mesmo menu Depurar.
22
simples de se fazer a mesma tarefa como por exemplo um duplo clique sobre a margem marcadores, logo a frente da linha desejada. Veja na Ilustrao 14. Para desmarcar um ponto de interrupo, desativ-lo ou simplesmente limpar todos eles use os respectivos comandos no menu Depurar, comando Pontos de Interrupo. Nota: A Margem de marcadores pode ser ativada/desativada clicando sobre o editor de textos com o boto direito do mouse, escolhendo Opes e em seguida clicando em Alternar margem de marcador.
Para esta demonstrao eu marquei uma interrupo na primeira linha de cdigo da funo set_valor(), no arquivo funcoes_geral.c, ou seja, a linha que contm o cdigo:
GtkWidget *wid = glade_xml_get_widget (xml, meu_widget);
Quadro 4 Primeira linha de cdigo da funo set_valor(), onde foi marcada a interrupo
Uma vez que o depurador esteja ativado ns vamos rodar o programa usando a tecla [F4], ou o menu Depurar, comando Execuo, e opo Executar/Continuar que permitem executar o nosso programa com os recursos de depurao. Uma vez que o nosso programa esteja sendo executado ns usaremos as abas: Debug, Locals, Stack e Watchs para avaliar a situao atual e controlaremos o programa usando as teclas de [F4] at [F8].
23
A aba Locals mostra as variveis locais da funo atual com seus respectivos valores. Esta aba ser bastante til se voc estiver analisando o comportamento das variveis locais de determinada funo. A cada vez que uma varivel mudar de valor ela ser destacada com a cor vermelha. Pra completar, ao clicarmos com o boto direito do mouse sobre qualquer uma das variveis locais ns poderemos mudar o seu formato de exibio entre Formato padro, Binrio, Octal, Decimal com sinal, Decimal sem sinal, Hexadecimal, Caracter ou ainda inspecionar a regio de memria onde o dado encontra-se armazenado. Por exemplo: Varivel
wid wid_tipo buffer valor_txt (GtkWidget *) 0x40000000 (gchar *) 0x0 \230a\021\b (const gchar *) 0x8949105 Fgfdg46gfdbfg\045f4$\01234FGRE\234\231FGRFRy6546y
Valor
A aba Stack mostra a pilha de chamada de funes desde a funo main no seu programa principal, passando por todas as funes nas bibliotecas vinculadas at a funo que est sendo depurada. Clicando com o boto direito sobre qualquer uma das linhas podemos ver informaes referentes ao estado dos registradores e memria neste instante de tempo em que o programa parou. Se for necessrio ver do instante anterior (chamada de funo anterior) basta dar um duplo clique sobre ela, antes. Exemplo: Ativo Contagem => 0 funcoes_geral.c:49 Frame
set_valor(meu_widget=0x98678bd label1, valor=6) em
24
A aba Watches permite inspecionar qualquer varivel no seu programa. Desde que ela esteja dentro do seu escopo. Isso significa que se uma varivel local estiver na lista de inspeo, quando voc sair desta funo a varivel deixar de ter seu valor visvel. Ainda assim uma ferramenta til, e muito til, j que voc poder definir aqui apenas as variveis que realmente devem ser monitoradas, sendo elas locais ou globais e ainda pode realizar algumas operaes com elas se houver necessidade: Como por exemplo fazer atribuies, realizar clculos aritmticos com as variveis fazer verificaes lgicas etc. Para que se possa adicionar novas variveis ou expresses a serem inspecionadas clique com o boto direito do mouse em qualquer local nesta aba e escolha a opo Adicionar expresso. O mesmo vlido se voc quiser remover uma varivel da lista ou limpar toda a lista. Ex.: Varivel valor valor_txt buffer buffer[0] buffer[1] buffer[2] buffer[3] buffer[4] buffer[1]==buffer[2] = 27 = (const gchar *) 0x8049105 fgert\34fdfhgyutygk$%$\78dfsd\23\45\123 = 8\017\016\b = 56 '8' = 15 '\017' = 14 '\016' = 8 '\b' = 0 '\0' =0 Valor
25
Tecla [F5] (Menu Depurar, Comando Execuo, opo Passo para dentro) Esta tecla usada para avanar linha-a-linha dentro do programa, se chegar a uma linha que chame uma outra funo sua voc ser levado automaticamente at a primeira linha desta funo, quando chegar no final dela e ainda pressionar [F5] voc ser automaticamente levado a funo anterior de onde esta foi chamada at que no haja mais qualquer linha a ser executada. Obs: Quando chegar na ltima linha de cdigo possvel de ser executada, mesmo que se pressione novamente a tecla [F5] a sua aplicao continuar congelada. Tecle [F4] para continuar a execuo normalmente. Por exemplo exemplo, se houver um breakpoint na linha: gdoublee2=get_valor (entry2) - segunda chamada a esta funo no manipulador on_button3_clicked - ao teclar [F5] voc entrar na funo get_valor() podendo analisar linha a linha desta funo. por isso que esta ao se chama passo para dentro. Tecla [F6] - (Menu Depurar, Comando Execuo, opo Passo por cima) Esta tecla far com que a depurao avance linha-a-linha, assim como a tecla [F5], mas com a diferena de que havendo uma chamada de funo no caminho, como no exemplo citado antes, o depurador passar por cima dela, ou seja, ir executar aquela funo normalmente como se fosse um comando da linguagem e avanar para a linha seguinte da sua funo. Tecla [F7] - (Menu Depurar, Comando Execuo, opo Passo para fora) Aproveitando o exemplo dado anteriormente, ns pusssemos um breakpoint na funo on_button3_clicked, justamente na linha que chama a funo get_valor(), mas ns no queremos entrar nesta funo, ento deveramos pressionar [F6], para passar por cima de get_valor, mas por um descuido pressionamos [F5] indo diretamente para a primeira linha desta funo ... a funo get_valor() grande demais para avanarmos linha-a-linha e cancelar a depurao para recomear novamente o far perder muito. A soluo para isso a tecla [F7] que dar um passo para fora de get_valor, indo para a linha seguinte da funo que estvamos antes, como se nada de errado tivesse acontecido. Tecla [F8] - (Menu Depurar, Comando Execuo, opo Executar at o cursor) Esta tecla simplesmente executa o seu cdigo at a posio atual do cursor. Isso til quando voc no quer se dar ao luxo de marcar apenas um breakpoint. Basta clicar na linha desejada e teclar [F8].
Concluso
Isso apenas uma parte do tudo que se pode fazer com o Anjuta. Eu no abordei o uso do CVS que um poderoso recurso para controle de verses e interessantssimo para projetos que sero mantidos por uma equipe de desenvolvedores, onde todos podero mexer no cdigo fonte, sem no entanto perderem as alteraes implementadas pelos demais participantes do grupo. Talvez num futuro prximo eu venha a escrever sobre este recurso e at mesmo inclu-lo neste mesmo documento, mas por enquanto s. Acredito que daqui para frente seja possvel ao leigo aspirante a desenvolvedor GTK/Glade criar seus programas com uma interface amigvel, agradvel e prtica. Obrigado pela leitura e espero que tenha gostado. Dvidas, sugestes, elogios e crticas podem ser feitas a partir do site. Felicidades e boas linhas de cdigo!
26
0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.
27
A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machinegenerated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts,
28
you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: FrontCover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the
29
Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.
30
You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the
31
Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.