Programar C pra linux, tendo aula no windows (duvidas e problemas)

Iniciado por ArKanjo, 08 de Outubro de 2009, 13:23

tópico anterior - próximo tópico

ArKanjo

Ola,
Pesquisei ja e vi varios topicos sobre este assunto, mas todos com problemas variados e topicos bem velhos.

Estou no primeiro periodo de analise de sistemas, estamos tendo programação em C

O problema que é dando aula em Visual Studio, mas prefiro usar meu laptop com linux, kubuntu pra ser exato.

Daí vem os problemas.
Primeiro tentei achar uma IDE facil,
Preciso de algo simples, pra C mesmo, mas que tenha um debug facil de entender mostrando o valor das variaveis e tudo mais.

Como uso KDE a primeira ideia foi tentar o Kdevelop
Mas ele da varios erro pra compilar reclamando de permissão de acesso, instalei ele normal pelo apt-get, assim como bulid-essentials

Comecei usar o Code::Block, mas ainda não estou totalmente contente com ela.
Experimentei o Eclipse CDC, mas também não consigo compilar com ele, apesar que parece bom.
Gostaria de coisas como acesso facil a help dos comandos, acho que o da borland tem esquema de selecionar o comando e apertar F1, gostaria algo assim..
também auto-completar bom e rapido ajudava, alem de identação automatica e coloração também ...

Até agora consegui usar o Codeblocks, apesar de sentir falta dessas coisinhas que comentei, tem mais não achei muito bom nele.
Mas agora começamos com getch, getche e outros que tem no conio.h que não tem no linux... to tentando achar um manual simples em portugues do ncurses mas não achei ... e ja não gostei que pelo que entendi tem que ficar inicializando e finalizando o curses ..  ::) ??? ::)

Outro problema é o buffer
na aula aprendemos a usar
fflush();
mas ja li que isso é o jeito errado, mas não achei um jeito bem certo
vi algo como
scanf("%c%*c",var);
mas hora funciona hora não..
vi também o
__fpurge();
esse parece que funcionou por enquanto
mas tem solução mais "ideal" ?



Então preciso de dicas pra começar programar em C pra linux,
também dicas de foruns bons e movimentados com gente que quer ajudar, como este do Ubuntu, mas pra programação
qual recomendam ??

tem algum livro ou apostila em portugues que ensine C para linux, pra iniciante ? pq os que achei é pra quem ta migrando do C pra windows


E todas outras dicas que tiverem pra eu mostrar que no linux posso fazer tudo que fazem no windows, e melhor :D hehe

Tks !

Os erros do Kdevelop e Eclipse, depois coloco aki pra me ajudarem a resolver, ja que agora não estou no meu micro pra ver...
;)
Liberdade é tudo !
"Be free, be linux" Ed Carlos

ArKanjo

Ola,

Estou ressucitando este topico pra ver se alguem me ajuda


Agora estou no 2 período de Analise e desenvolvimentos de sistemas

Estamos agora aprendendo C++

E continuo com praticamente as mesmas duvidas


Qual IDE usar ???

Estou com td atualizado, formatei o micro e coloquei o Kubunti 9.10

Kdevelop
Fico perdido, crio o projeto e não consigo nem ver um simples Hello World rodando, ele não habilita a opção no menu, e qd apacereu habilitado nada acontece ao clicar

Eclipse até que vai, mas não só consegui usar Debug na primeira vez, não mudei nada de configuração, só criei outro projeto e qd clico pra debug ele me pede um arquivo de debug ou algo assim ... não sei bem agora pq não estou na minha maquina ..

o Code::Block que antes funcionava, desde uma atualização ainda no kubuntu 9.04 nunca mais consegui usar o Debug ele fica dando um erro dizendo algo a respeito de não poder manipular o terminal ou algo assim ... pesquisei achei varios reclamando do mesmo erro no gdb até em outras IDEs como netBeans , mas nenhum dizendo o que é e como resolver ...


Enfim ..

Alguem me ajude
e podem me indicar um bom forum pra iniciantes em programação ? de preferencia onde tenha usuarios linux, pra eu não ficar ouvindo coisas como "...Usa o Visual Shit++..." ou coisas assim,


Gostaria de aprender a usar um Vim ou Emacs, pra poder fazer alguns exercicios a partir do trampo pelo SSH no micro em casa, mas não to achando um tutorial facil pra iniciantes... :(
Liberdade é tudo !
"Be free, be linux" Ed Carlos

Darcamo

Uma boa IDE realmente ajuda.
Já usei kdevelop e eclipse faz tempo. Ambos possuem pontos fortes, mas também tem pequenos problemas que me chateavam e hoje uso o Emacs com um Makefile genérico (compila tudo na pasta -> se tiver interesse veja esse tópico http://ubuntuforum-pt.org/index.php/topic,21155.0.html)

O kdevelop usa o automake para criar o makefile que sera usado para o projeto. Na parte direita da janela tem umas abas onde uma delas permite você adicionar novos arquivos ao projeto, gerenciar os targets, etc.. Por um lado simplifica as coisas, mas as vezes eu tinha problemas estranhos e acabava tendo que fazer um "dist clean" para apagar todos os arquivos criados por ele e forçar a criação de novos.

O Eclipse pode usar makefile que você forneça, mas a opção padrão dele é compilar tudo que está na pasta do seu projeto, o que costuma funcionar bem. Quanto ao "arquivo de debug" que ele pede, esse é o executável do seu programa. A única coisa chata do eclipse é que ele era meio pesado, especialmente com code completion, mas as coisas podem ter melhorado desde que usei ele.

Tanto kdevelop quanto eclipse não são difíceis de usar depois que você entende como eles funcionam, mas no começão pode ser difícil descobrir como se compila um simples hello world (especialmente no eplipse). Não quero instalar eles aqui para lhe ajudar mais do que isso porque ambos requerem a instalação de vários outros pacotes. Mas se você não conseguir nem mesmo compilar com eles podemos então testar a "Área de trabalho remota" do Ubuntu.

Quanto ao Emacs, vale a pena começar lendo o próprio tutorial que vem nele. Menu Help>Tutorial
Eu gosto bastante da combinação Emacs+Makefile porque nunca tenho "problemas estranhos" com ela como acontecia com o kdevelop. Além do fato de eu usar o Emacs para um bocado de coisa incluindo lista de tarefas, agenda, etc. Ter tudo na merma ferramenta facilita as coisas.

Quanto a help para funções, normalmente recorro ao google mesmo, mas um site muito bom para C++ que vale a pena conferir é http://www.cplusplus.com/

yzarc

; Linux is almost there!

ArKanjo

Valeu as sugestões ..


O EMACS acho que tem o completar e colorir o codigo né ??

o que preciso é algo bem basico.

Que tenha auto identação, colorir e completar codigo
e que tenha um botão pra compilar e executar
o mais basico, sem makefile nem nada que nem sei usar ainda, é pra programinhas basicos mesmo de aula
por enquanto.
e também um debug facil de visualizar variaveis e coisas assim,
Algo tipo,
digito o codigo, aperto um atalho e ele roda o programa, marco o breakpoint apertou outro atalho ele roda linha a linha o programa mostrando as variaveis e coisas assim...


Isso é o que preciso por enquanto, mas pretendo também ir aprendendo as IDEs como Kdevelop e Eclipse, quando
evoluir mais no curso e precisar coisas maiores com banco de dados e td mais ....


Só la por terça estarei de folga e coloco melhor aki o problema que estou tendo com o Eclipse e Kdevelop ..
Vou esperimentar também o NetBeans pra ver como é, que este ainda não usei.

Tks !
Liberdade é tudo !
"Be free, be linux" Ed Carlos

Darcamo

CitarO EMACS acho que tem o completar e colorir o codigo né ??
Mais ou menos. Ele pode completar qualquer palavra que você já tenha entrado com Alt+/ (repete o comando para alternar entre as possibilidades). Só isso já é suficiente na maioria dos casos, mas para completar de maneira mais "IDE like" você pode instalar pacotes como o CEDET (http://cedet.sourceforge.net/), mas na minha opinião o Alt+/ já é suficiente.

Quanto a compilar, o Emacs não cria um Makefile para você, mas usando o tópico que mencionei antes é fácil criar um. Depois disso você pode compilar pelo Emacs (eu atribui o atalho F9 para isso) e você terá facilidades como clicar em uma mensagem de erro na compilação e ir para a linha de código, etc..

Identação e "colorir" funcionam perfeitamente. Na verdade, se inventarem uma nova linguagem amanhã o Emacs provavelmente será um dos primeiros a ter esses recursos para a nova linguagem.

Debugar também funciona bem através da integração com o gdb (que é o debugger que provavelmente todas as IDEs no linux usam para C/C++), mas você tem que aprender alguns pouco comandos, o que não é difícil.

O resumo disso tudo é: Se você nesse momento quer apenas uma IDE e não quer gastar muito tempo aprendendo outras coisas além de programação para criar seus primeiros programas então tente uma das IDEs já sugeridas aqui. Mas se estiver disposto a investir algum tempo então vá em frente com o Emacs que traz retorno.

ArKanjo

Então
o que mais estou tendo problema no momento com as IDEs é com o GDB que esta dando este erro

warning: GDB: Failed to set controlling terminal: Operação não permitida

Tentei o NetBeans e achei ela bem legal, funciona bem, mas pra debbugar também da um erro


Falha ao abrir o terminal externo [/usr/bin/konsole. -e. /tmp/gdb helper 1892906945905078877.sh]
código de retorno 0


Pra executar e compilar vai normal, tanto no code::blocks quanto no netbeans, mas pra debug nenhum ta funcionando desde desde a versão 9.04 do sistema.. nos anteriores eu usava o code::blocks sem esse erro ...


Tem também o erro no Eclipse
Can't find a source file at "dl-debug.c"
Locate the file or edit the source lookup path to include its location.

E abaixo aparece 3 botões
View Diassembly...
Locate File...
Edit Source Lookup Path...

Mas o estranho que na primeira quando instalei vez que usei foi normal, depois da segunda, sem ter mudado configuração nenhuma, ele apareceu isso...

Liberdade é tudo !
"Be free, be linux" Ed Carlos

yzarc

vc ta usando o kubuntu ou ubuntu?

vc ta mudando o perfil pra debug no netbeans?
; Linux is almost there!

ArKanjo

Citação de: yzarc online 22 de Março de 2010, 20:32
vc ta usando o kubuntu ou ubuntu?

vc ta mudando o perfil pra debug no netbeans?


To usando o kubuntu...


Mudar perfil pra debug ??

nem sei, instalei ele hoje ....
Marquei um breakpoint e cliquei pra fazer debug ...

Abri ele agora pra ver, acho que esta como Debug sim .. ta um drop down na barra de ferramentas onde tem Release e Debug e esta como Debug :)



Opa, dei um clean no Netbeans e agora ele ta dando o mesmo erro do Code::Blocks

&"warning: GDB: Failed to set controlling terminal: Opera\303\247\303\243o n\303\243o permitida\n"
10 e 20


E também um aviso dizendo
A versão do Gdb 0 não é suportada nesta plataforma.continue por sua própria conta e risco

Acho que o problema é o Gdb mesmo ..

Não tenho certeza, mas acho que é algo da versão ... antes acho que ele estava com o GDB 6.7 e agora esta no 7.0 ou 7.1, não sei mas é o que tem no repositorio do ubuntu 9.10 mesmo ...
Desconfio que ele parou qd foi atualizado dentro do repositorio, ainda no kubuntu 9.04 e continuou mesmo depois de eu formatar e por a 9.10
Liberdade é tudo !
"Be free, be linux" Ed Carlos

Polaco

Olha, não é o ideal, mas nas quando estudei C usei o mesmo software que o pessoal usava para Windows, via WINE, e funcionou perfeitamente, o Dev-C++.

Instalou e rodou como se fosse nativo.

Tentei usar o emacs, mas deu um nó em meu cérebro, e também escrever o código num editor de texto comum e usar o GCC para compilar, via terminal, mas também não deu muito certo, eu perdia muito tempo, a solução foi apelar para o software não-nativo.
Ubuntu 10.04 x64 @ Dell Optiplex 740

yzarc

na barra de ferramentas do netbeans tem um combo-box, nele tem as opcoes:
1- release - q compila para desempenho.
2- debug - q compila com todas as informacoes necessarias para debugar, como numero das linhas por exemplo.

no seu caso, use sempre o modo debug pois vc nao vai precisar de desempenho agora.

eu nao uso kubuntu e nao recomendo (por ser uma subdistro do ubuntu, nao recebe toda a atencao em usabilidade q fez a fama do ubuntu). E' uma discursao longa q nao vem ao caso. no ubuntu o netbeans roda de prima ;)

achei uma coisa na net: parece q o netbeans nao se da bem com o konsole, vc pode configura-lo para nao usar o konsoler. clique com o direito no icone do projeto (a esquerda), va em propriedades; nesta janela, va no item executar; mude o "tipo de terminal" para um outro e teste.

a solucao de emular uma IDE windows no Linux pra programar em C e' um pouco esquisita e um grande FAIL pro linux. espero q vc nao tenha q recorrer a esta solucao...

; Linux is almost there!

ArKanjo

Citação de: yzarc online 23 de Março de 2010, 05:46
na barra de ferramentas do netbeans tem um combo-box, nele tem as opcoes:
1- release - q compila para desempenho.
2- debug - q compila com todas as informacoes necessarias para debugar, como numero das linhas por exemplo.

no seu caso, use sempre o modo debug pois vc nao vai precisar de desempenho agora.

eu nao uso kubuntu e nao recomendo (por ser uma subdistro do ubuntu, nao recebe toda a atencao em usabilidade q fez a fama do ubuntu). E' uma discursao longa q nao vem ao caso. no ubuntu o netbeans roda de prima ;)

achei uma coisa na net: parece q o netbeans nao se da bem com o konsole, vc pode configura-lo para nao usar o konsoler. clique com o direito no icone do projeto (a esquerda), va em propriedades; nesta janela, va no item executar; mude o "tipo de terminal" para um outro e teste.

a solucao de emular uma IDE windows no Linux pra programar em C e' um pouco esquisita e um grande FAIL pro linux. espero q vc nao tenha q recorrer a esta solucao...



Vi esse mesmo problema do netbeans, e ja mudei pro Xterm .. mas o erro persiste ..

Pelo que percebi o erro é no GDB
o mesmo erro no netbens, que acho que é feito em java, quanto no Code::Blocks e outros, alem de os pacotes buld-essentials e outros são o mesmo tanto pra kubuntu e ubuntu, então acho também q não depende do gerenciador de janelas ...

Acho que o problema ta sendo causado por alguma outra coisa ... mas não sei o que pode ser ... talvez alguma permissão ou configuração ...

Vi outros reclamando de mesmo erro, mas não achei solução ainda ...

Muito estranho isso ..
Será que mais alguem não teve esse erro ??

Tanto o netbeans quanto o code::blocks peguei pelo repositorio mesmo

Unica coisa que ta fora do padrão pra mim é que incluir repositorios do Medibuntu pra parte multimedia e habilitei todos repositorios que vem desativado nos ubuntu & cia, mas acho que a maioria deve fazer o mesmo ...

Desconfio que o problema é do GDB 7.0 que esta instalado ... penso em tentar colocar o 6.8 mas antes queria saber se não tem outra solução "mais certa" pra ser feito ...
Liberdade é tudo !
"Be free, be linux" Ed Carlos

Darcamo

Só para confirmar, o pacote gdb está instalado, certo?
Pergunto porque não sei se essas IDEs tem o gdb como dependência, já que elas servem para várias linguagens que não necessariamente usam o gdb.

Você também pode testar o gdb pelo terminal. Basta digitar
gdb executavel_do_seu_programa
O comando "run" roda o programa, "help" para ajuda e "quit" sai. Você provavelmente não vai querer debugar pelo terminal então não vou colocar mais comandos aqui.

ArKanjo

Citação de: Darcamo online 23 de Março de 2010, 20:56
Só para confirmar, o pacote gdb está instalado, certo?
Pergunto porque não sei se essas IDEs tem o gdb como dependência, já que elas servem para várias linguagens que não necessariamente usam o gdb.

Você também pode testar o gdb pelo terminal. Basta digitar
gdb executavel_do_seu_programa
O comando "run" roda o programa, "help" para ajuda e "quit" sai. Você provavelmente não vai querer debugar pelo terminal então não vou colocar mais comandos aqui.

O GDB ta instalado sim ...

ta a versão 7.0
acho que ele deve ter vindo pelo pacote build-essentials

Ja tentei digitar no terminal e ele vai para o prompt
gdb>

e roda o help..
mas não sei usar ele por terminal assim direto ..

pela msg de erro, algo ta fazendo com que não permita os IDEs controlarem ele ..
imagino que se souber usar direto pelo terminal deve funcionar ..
Liberdade é tudo !
"Be free, be linux" Ed Carlos

Darcamo

Tutorial super básico do gdb (até porque não sei muito mais que isso e isso normalmente já basta).
Vou usar como exemplo o código abaixo, cujo arquivo nomeei de test.cpp
#include <stdio.h>

int soma(int a, int b)
{
    return a+b;
}

int main(int argc, char *argv[])
{
    int a = 10;
    int b = 15;
    printf("a+b = %d\n",soma(a,b));
    return 0;
}

Ps: Na hora de compilar passe o parâmetro "-g" para o compilador para que ele adicione informações necessárias para debug no executável.
g++ test.cpp -g -o test

Rode então o gdb com o comando
gdb test

Agora o gdb está no prompt esperando por comandos.
Digite "run" para rodar o programa. ELe deverá rodar sem problemas e exibir a saída do programa, no caso "a+b=25".

Nada interessante, já que ele não parou.
Digite então "break main" para adicionar um breakpoint na função main e depois "run".
Ele deverá exibir algo como "11       int a = 10;" onde 11 é o número da linha no código, que também é exibida. Essa linha de código ainda não foi executada. Digite "next" e ela será executada. Será então exibido algo como "12       int b = 15;"
Digite "continue" para que o programa continue a execução até o próximo breakpoint (até o fim do programa, já que não colocamos nenhum outro.

Uma boa dica é que você pode abreviar os comandos e normalmente só a primeira letra basta. Digite então "r" (run) para rodar o programa novamente. Ele vai parar novamente na linha 11. Agora digite "b +2" (break +2) para adicionar um breakpoint duas linhas após a atual (a linha com o printf).

Opa, não sabe onde o programa está? Ou melhor, o que tem na linha 11? Digite "l 11" (list 11) e ele exibirá algumas linhas de código em torno da linha 11.
Não sabe mais onde estão os breakpoints? Digite "i b" (info breakpoints) para exibir informações dos breakpoints incluindo o número do breakpoint e em que arquivo:linha ele está.

Ok, lembrando que estamos parados na linha do printf, vamos ver os valores das variáveis "a" e "b". Digite "p a" (print a) e "p b" para ver os valores de ambas. Vamos então mudar o valor de "a" com o comando "set variable a=50" (nesse caso precisamos escrever o comando completo porque só "s" é step, mas você pode usar TAB par completar). Agora continue o programa com o comando "c" o printf deverá exibir "a+b = 65".


Alguns outros comandos úteis:

  • delete número_do_breakpoint -> deleta o breakpoint especificado e se não especificar o número todos eles são deletados
  • display expressão -> exibe a expressão cada vez que você parar em um breakpoint
  • clear -> rode esse programa quando estier parado em um breakpoint e ele deleta o breakpoint
  • frame -> mostra o stack frame (útil para saber onde você está)
  • help -> o nome já dis tudo
  • info -> digite só info e aperte TAB para ver as possibilidades. Ex: info args -> exibe os argumentos do programa
  • set -> digite set e aperte TAB para ver as possibilidades. Ex: set args "lalala"