Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal, não sei se aqui é o local certo para postagens desse tipo de erro, mas meu CodeBlocks está apresentando uma caixa de erro ao final da execução do código que eu não sei o que pode estar motivando isso.

 

image.png.a369eda6119898455f0860b35c4a7a6e.png

 

Este é o erro que aparece. Se eu continuo, fica normal, se eu dou STOP, ele trava e sai do programa.

Postado

Olá Luciano, não sei qual seu code blocks, mas a melhor coisa a fazer é desinstalar o pacote do code blocks apagando essa pasta como mostra na imagem 2 e instala novamente passo a passo.1716768498_CapturadeTela(34).thumb.png.2f1f8b26d9c36b2518a055183f67f323.png1546551679_CapturadeTela(33).thumb.png.f6a8d1061939d32e1693a43970c6b864.png

 

Postado

image.png.a0d579d2190ec41d19988df6f906dbb3.png

 

É um bom sinal. Em resumo se você apertar STOP ele para e apertar CONTINUE ele continua. Como está escrito.

 

Leia a mensagem toda. Um teste para debug falhou. Falhou porque ao converter algo de long long para long se pode perder precisão, e não é que é mesmo? Afinal se eram 8 bytes e passou para 4 pode não caber o valor.

 

A instrução era um assert() como está aí. Essas coisas só rodam em debug mode. Faz sentido então a mensagem de que é um debug check... Se compilar seu projeto no modo Release não compila os assert() e seu programa vai rodar umas 20 vezes mais rápido, o que também não faz mal nenhum. E claro que não vai dar esse aviso.

 

Se vai MESMO usar o debugger pode compilar em 64 bits ver se muda algo, ou simplesmente comente esse assert... Basta você ir até a linha 182 do arquivo longlong.h e comentar o comando, já que assim está escrito aí.

 

Isso nada tem a ver com o Code::Blocks(). Apenas C. Ou C++.

 

No entanto se quer usar wxWidgets ou qualquer outro pacote desses talvez pudesse usar outro ambiente e um gerenciador de pacotes, porque aí basta um comando de uma linha e você vai fazer outra coisa por uns minutos e quando voltar ele já compilou tudo pra você.  Como o vcpkg da Microsoft. É muito mais fácil...

 

Veja alguns pacotes como allegro 5, SDL 2, GTK 3.22 e wxWidgets 3.1.4 só para focar nos pacotes "do ramo" ... Eu coloquei uns sub-pacotes para forçar a listar uma linha só...
 

:\bin\vcpkg>vcpkg search sdl2-gfx
sdl2-gfx             1.0.4-6          Graphics primitives (line, circle, rectangle etc.) with AA support, rotozoomer...

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search allegro
allegro5             5.2.6.0          Allegro is a cross-platform library mainly aimed at video game and multimedia ...
imgui[allegro5-binding]               Make available Allegro5 binding

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search wxwidgets
plplot[wxwidgets]                     plplot wxwidgets module
wxchartdir           1.0.0            wxChartDir provides components for the integration and use of the commercial C...
wxwidgets            3.1.4#3          wxWidgets is a widget toolkit and tools library for creating graphical user in...

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search GTK
atkmm                2.24.2#3         atkmm is the official C++ interface for the ATK accessibility toolkit library....
gtk                  3.22.19-4        Portable library for creating graphical user interfaces.
gtkmm                3.22.2#4         gtkmm is the official C++ interface for the popular GUI library GTK+.
scintilla            4.2.3#1          A free source code editing component for Win32, GTK+, and OS X

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>

 

Então você pode só digitar 
 

vcpkg install wxwidgets 

 

E o sistema compila tudo. 

 

E aí você roda
 

C:\bin\vcpkg>vcpkg list | grep wxwidgets
wxwidgets:x86-windows                              3.1.4#3          wxWidgets is a widget toolkit and tools library ...

C:\bin\vcpkg>

 

 

E depois em qualquer projeto pode usar os include e não precisa mais configurar nada.

 

  • Curtir 1
Postado
17 horas atrás, vangodp disse:

O pessoal do codeblocks esta migrando a ferramenta para o wxWidgets 3, que se encarrega de gestionar janelas botões etc(A interface gráfica), certas coisas não funcionam ou mostram avisos, mas isso não atrapalha em nada no seu programa ja que codeblocks "é só o editor", ele depende do mingw para compilar e esse ta certinho, pode fechar e continuar trabalhando. Eles estão trabalhando no CB constantemente e certamente para futuras versões isso já esteja solucionado. Você pode fazer duas coisas... ignorar isso ou buscar outro IDE.

Obrigado pela ajuda amigo, eu baixei o VS Code para evitar de ter um IDE pra cada tipo de linguagem (quero praticar C++ e Python), então melhor ter tudo junto em um lugar só. Você acha isso uma boa ? Lá também estou tendo alguns problemas com C++.

 

10 horas atrás, arfneto disse:

image.png.a0d579d2190ec41d19988df6f906dbb3.png

 

É um bom sinal. Em resumo se você apertar STOP ele para e apertar CONTINUE ele continua. Como está escrito.

 

Leia a mensagem toda. Um teste para debug falhou. Falhou porque ao converter algo de long long para long se pode perder precisão, e não é que é mesmo? Afinal se eram 8 bytes e passou para 4 pode não caber o valor.

 

A instrução era um assert() como está aí. Essas coisas só rodam em debug mode. Faz sentido então a mensagem de que é um debug check... Se compilar seu projeto no modo Release não compila os assert() e seu programa vai rodar umas 20 vezes mais rápido, o que também não faz mal nenhum. E claro que não vai dar esse aviso.

 

Se vai MESMO usar o debugger pode compilar em 64 bits ver se muda algo, ou simplesmente comente esse assert... Basta você ir até a linha 182 do arquivo longlong.h e comentar o comando, já que assim está escrito aí.

 

Isso nada tem a ver com o Code::Blocks(). Apenas C. Ou C++.

 

No entanto se quer usar wxWidgets ou qualquer outro pacote desses talvez pudesse usar outro ambiente e um gerenciador de pacotes, porque aí basta um comando de uma linha e você vai fazer outra coisa por uns minutos e quando voltar ele já compilou tudo pra você.  Como o vcpkg da Microsoft. É muito mais fácil...

 

Veja alguns pacotes como allegro 5, SDL 2, GTK 3.22 e wxWidgets 3.1.4 só para focar nos pacotes "do ramo" ... Eu coloquei uns sub-pacotes para forçar a listar uma linha só...
 


:\bin\vcpkg>vcpkg search sdl2-gfx
sdl2-gfx             1.0.4-6          Graphics primitives (line, circle, rectangle etc.) with AA support, rotozoomer...

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search allegro
allegro5             5.2.6.0          Allegro is a cross-platform library mainly aimed at video game and multimedia ...
imgui[allegro5-binding]               Make available Allegro5 binding

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search wxwidgets
plplot[wxwidgets]                     plplot wxwidgets module
wxchartdir           1.0.0            wxChartDir provides components for the integration and use of the commercial C...
wxwidgets            3.1.4#3          wxWidgets is a widget toolkit and tools library for creating graphical user in...

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>vcpkg search GTK
atkmm                2.24.2#3         atkmm is the official C++ interface for the ATK accessibility toolkit library....
gtk                  3.22.19-4        Portable library for creating graphical user interfaces.
gtkmm                3.22.2#4         gtkmm is the official C++ interface for the popular GUI library GTK+.
scintilla            4.2.3#1          A free source code editing component for Win32, GTK+, and OS X

If your library is not listed, please open an issue at and/or consider making a pull request:
    https://github.com/Microsoft/vcpkg/issues

C:\bin\vcpkg>

 

Então você pode só digitar 
 


vcpkg install wxwidgets 

 

E o sistema compila tudo. 

 

E aí você roda
 


C:\bin\vcpkg>vcpkg list | grep wxwidgets
wxwidgets:x86-windows                              3.1.4#3          wxWidgets is a widget toolkit and tools library ...

C:\bin\vcpkg>

 

 

E depois em qualquer projeto pode usar os include e não precisa mais configurar nada.

 

Obrigado, eu voltei a programar agora, quero aprender algumas linguagens, então eu não entendo muito essa questão de Debugger, por quê é tão necessário ? No CodeBlocks nós apertamos a engrenagem primeiro e depois rodamos o código, é uma espécie de "montagem" do programa ? Aí vem as extensões .o e .exe além do .cpp. Aliás sua resposta inteira está muito avançada para mim kkkk

Postado
16 minutos atrás, Luciano Lacerda disse:

Obrigado, eu voltei a programar agora, quero aprender algumas linguagens, então eu não entendo muito essa questão de Debugger, por quê é tão necessário ? No CodeBlocks nós apertamos a engrenagem primeiro e depois rodamos o código, é uma espécie de "montagem" do programa ? Aí vem as extensões .o e .exe além do .cpp

 

Muito dos problemas em entender a mecânica dessas coisas vem da conjunção de ensinar errado e aprender errado e da "falta" do uso de (bons) livros. E do uso de  um IDE antes de entender um mínimo do que é um programa. Claro, é minha opinião apenas, e aqui é um forum mesmo :D e não é o caso de todo mundo

 

Não dá pra explicar muito aqui, dá muito trabalho, o editor é ruim e foge do propósito. Vou mostrar um exemplo mínimo e um programa b3st@ em C++, p.cpp:
 

#include <iostream>
using namespace std;
int main()
{
    string coisa[3] {
        "forum","clube","hardware" };
    int N = sizeof(coisa) / sizeof(string);
    for (int i = 0; i <= N; i += 1)
        std::cout << 1 + i << 
            ": \"" << coisa[i] << "\"\n";
    return 0;
}


Entenda que o programa tradicional em um arquivo exe começa com uma coleção de headers e arquivos fonte, e aí aparece o compilador que junta o código dos arquivos .cpp e .h e gera um arquivo tipo p.obj. Aí vem um programa, o LINK, que junta esse p.obj com o que for preciso e gera um arquivo p.exe. "O que for preciso" é uma longa história, porque o programa depende por exemplo de coisas que estão em arquivos de biblioteca, como o caso de cout no programa aí.

 

Se você usa um IDE e não sabe o que é o debugger jamais deveria usar o modo debug. Se o ensino de linguagens começasse pelo uso do debugger e sem um IDE você teria uma caminho muito mais simples para entender essas coisas, só que não é assim. Ninguém ensina assim e é uma pena.

 

De volta ao código

 

O programa acima tem um erro no for, um erro clássico, chamado de one-off: coisa é um vetor de 3 posições mas o for varia i de 0 a 3, então o programa vai cancelar ao tentar acessar coisa[3].

 

O debugger nada tem a ver com o IDE: trata-se de um programa que roda o seu programa linha a linha e permite coisas como parar o programa em um certa linha, acompanhar valores de uma variável, alterar sem mudar o programa, ver o código de arquivos .h, o d1@b0.

 

Vou mostrar uma execução usando um certo IDE e ambiente. Não faz diferença, exceto pra mim porque não tenho tempo e o Code::blocks é medíocre. E vai dar pra você entender...

 

Rodando


image.png.81134dd9ad7ca39b1c10c579ead9922f.pngNo IDE, no caso aqui Visual Studio em um desktop, marquei a linha 9, a do cout, como o que se chama breakpoint, apertando F9. E lá está a bolinha vermelha marcando a linha.

 

Ao rodar o programa (em Debug mode) ele vai parar nessa linha. Sozinho. Nada mal, certo? ;) 

 

 

Parada:

 

Tem um milhão de maneiras de usar isso, e todas começam por entender o que é. Vou escolher só uma. Ao rodar o programa, usando F5 nesse caso, ele para nessa linha e abre uma janela, Watch 1:
 

image.thumb.png.37070bdbb4835c4dc9291a3ef2ce478e.png

 

 

Nessa janela, um formulário, você pode colocar qualquer variável, ou mesmo mudar o valor delas. E aqueles botões onde está o Step Into permitem seguir linha a linha, entrando ou  não sozinho para dentro de outras funções. Tem uma janela Auto que acompanha variáveis em foco também. Ou pode reiniciar o programa, ou parar, o óbvio.

 

image.png.3b60545af4d3a0e23d0850c4b1ddf0ab.png

 

Eis o que temos no início do loop: N = 3, o vetor, o contador... clicando no sinal à esquerda de coisa abre o vetor

 

image.png.5c6f8fd03a3a39c61a6f8bb388bf9b11.png

 

E se pode ver os valores, em decimal ou em hex, e ver o óbvio, não existe coisa[3]

 

Seguindo o programa até i = 3 usando step into:
 

image.thumb.png.91915d884b4cd04c517001d7c9cb2acd.png

 

Veja a janela da console junto: agora N = 3, i = 2, então era pra encerrar, já que acabou o vetor. Mas aí vem o erro: como o for era pra ser <N e não <= N o programa vai tentar mostrar a próxima string de coisa[]

 

O fim

 

image.thumb.png.1dbb8408346db5897c08da43a4b5cfdc.png

 

E aí o programa cancelou e a janela de exception mostra o erro: Access Violation

 

Conclusão:

 

Com o debugger fica fácil acompanhar o programa e ver onde e como ele parou. E entender os valores, a memória, as variáveis que entram e saem de foco e tal.

 

Tire suas conclusões.

 

Isso tem claro um custo enorme: o código gerado é muito maior, o programa é ridiculamente mais lento. No entanto muita gente só usa no modo debug dentro de um IDE sem sequer saber o que é. Mas o valor é incalculável. Você pode parar o programa quando uma certa variável for alterada, por exemplo.

 

No VS Code--- outro IDE ---  você pode usar debug em um programa que roda em outra máquina, escrito em outra linguagem, ao mesmo tempo que o seu programa no seu desktop, or exemplo. Mesmo que uma rode Windows e a outra Linux. Com breakpoints dos dois lados na mesma máquina sem levantar da mesa

 

Compare isso com colocar dezenas de printf() em um programa e usar o console log no servidor web no navegador para seguir o javascript no código no servidor...

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!