# Manual do Nemiver

## Visão geral

Nemiver é um esforço contínuo para escrever um depurador gráfico autônomo que se integra bem ao ambiente de área de trabalho do GNOME. Atualmente, ele conta com um backend que usa o tão conhecido depurador GNU gdb para depurar programas em C / C++.

### Perspectivas

Nemiver foi projetado como um workbench gráfico genérico e um sistema de plug-ins que pode oferecer diversas perspectivas diferentes. Atualmente, a única perspectiva fornecida é a de um depurador, mas no futuro, podem haver perspectivas adicionadas para depuração de memória com o valgrind ou por ferramentas de perfilamento, tal como oprofile.

## Primeiros passos

Esta seção explica como iniciar o Nemiver e oferece uma visão geral básica sobre o aplicativo.

### Iniciando o Nemiver

Você pode iniciar o Nemiver dos seguintes modos:

Menu Aplicativos

- Escolha Programação Depurador Nemiver.

Linha de comando

- Digite `nemiver` e, então, pressione Enter.

  #### Opções adicionais de linha de comando

  Você pode encontrar uma lista de opções que podem ser passadas ao Nemiver na linha de comando digitando `nemiver --help-all`.

### A janela do Nemiver

Quando você iniciar o Nemiver, você verá uma janela que se parece muito com o seguinte:

#### Janela do Nemiver

Mostra a janela principal do Nemiver.

A janela do Nemiver contém os seguintes componentes:

Barra de menu

- Os menus na barra de menus contém todos os comandos que você precisa usar Nemiver.

Barra de ferramentas

- A barra de ferramentas contém as ações de depuração básica que podem ser usadas para executar ou passar pelo programa sendo depurado.

Bloco de visão de fontes

- Quando os arquivos fontes estão abertos, esta área vai mostrar arquivos fontes do programa sendo depurados.

Bloco de status

- O bloco de status contém diversas abas que exibem informações sobre o programa sendo depurado. Essas incluem o seguinte:

  Pilha de chamadas

- Mostra o estado atual da pilha de chamadas do programa sendo depurado.

Variáveis

- Mostra uma lista de todos argumentos de função e variáveis locais, além de seus valores e tipos.

Terminal de destino

- Se o programa sendo depurado imprime qualquer saída para o terminal, ela será exibida nesta aba.

Pontos de interrupção

- Esta aba exibe uma lista de todos os pontos de interrupção que foram definidos. Você pode ver o código fonte de um ponto de interrupção específico realizando clique-duplo em um item na lista ou clicando com botão direito do mouse e selecionando Ir para o fonte do menu. Além disso, pontos de interrupção podem ser excluídos, habilitados ou desabilitados nesta aba. Para mais informações sobre pontos de interrupção, veja nemiver-sect-breakpoints.

Registros

- Esta aba mostra todos os registradores de CPU e seus valores. Para mais informações, veja nemiver-sect-registers.

Memória

- Esta aba mostra uma visão do estado atual de uma localização de memória específica. Para mais informações, veja nemiver-sect-memory.

### Escolhendo um programa para depuração

Há várias formas de iniciar a depuração de um programa. Nemiver permite que você carregue um arquivo executável local, carregue um arquivo central, anexe a um processo em execução ou conecte a um servidor de depuração remoto.

#### Depurando um programa em execução

##### Usando o workbench

Para selecionar um programa executável para depurar, selecione Arquivo Executar... , o qual deveria exibir o seguinte diálogo:

###### Caixa de diálogo de execução

Mostra o diálogo para seleção de um executável para depurar

Neste diálogo, você pode selecionar o programa para ser depurado, quaisquer argumentos ou opções para serem passadas para o executável na linha de comando, o diretório de trabalho para executar o executável e quaisquer variáveis de ambiente que deveriam ser definidas qualquer o executável está sendo depurado.

##### Usando a linha de comando

Para iniciar uma programa executável para depuração a partir da linha de comando, basta especificar o nome do executável. Você pode tanto fornecer um caminho absoluto para o executável quanto, se ele está no caminho, você pode simplesmente fornecer o nome base do executável. Por exemplo, se `/usr/bin` está no seu caminho, ambas opções abaixo são válidas:

- `nemiver /usr/bin/nome-do-programa`

- `nemiver nome-do-programa`

###### Passando opções na linha de comando

Se você deseja passar opções na linha de comando para o programa que você está depurando, você deveria colocar aspas em volta dessas opções para evitar do Nemiver processá-las: `nemiver "prognam --arg1 --arg2"`.

#### Anexando a um programa em execução

##### Usando o workbench

Selecione o item de File Anexar ao programa em execução... , que deveria exibir o seguinte diálogo:

###### Caixa de diálogo de anexo

Mostra diálogo para anexar a um programa em execução

Selecione um processo da lista e clique no OK para começar a depuração do programa selecionado. Podem haver muitos processos listados no diálogo. Então, você pode filtrar a lista por apenas aqueles que você tem interesse digitando algum texto na caixa de texto localizada logo abaixo da lista.

##### Usando a linha de comando

Para anexar a um programa em execução a partir da linha de comando, use a opção `--attach`. A opção `--attach` aceita tanto um PID quanto um nome de processo. Então, por exemplo, para depurar o processo em execução `foo` que possui um PID de 1121, você poderia tanto digitar `nemiver --attach foo` ou `nemiver --attach 1121`.

#### Carregando um arquivo core

##### Usando o workbench

Selecione o item de menu Arquivo Carregar um arquivo core... para trazer o diálogo a seguir, o qual permitirá você carregar um arquivo core:

###### Diálogo para carregar um arquivo core

Mostra diálogo para carregar um arquivo core

##### Usando a linha de comando

Arquivos core não podem ser carregados a partir da linha de comando.

#### Depuração remota

Nemiver permite que você se conecte a um servidor de depuração remoto

##### Usando o workbench

Para conectar a um servidor de depuração remoto, selecione Arquivo Conectar a um destino remoto...

Diálogo de depuração remoto

Selecione o executável para carregar e a localização onde quaisquer bibliotecas remotas estão localizadas e, então, preencha os detalhes sobre a conexão com o servidor remoto.

##### Usando a linha de comando

Nemiver não fornece uma forma para conectar a um servidor remoto usando a linha de comando

## Usando o Nemiver

Essa seção descreve como usar o Nemiver para depurar seu aplicativo.

### Ações básicas de depuração

As ações básicas de depuração estão disponíveis na barra de ferramentas principal, no menu Depurar e pelos atalhos de teclado. A maioria das ações comuns estão listadas abaixo:

Continuar

- Inicia o programa. O programa vai executar até que acertar um ponto de interrupção ou até o programa terminar, a menos que ele seja interrompido manualmente pelo usuário clicando em Parar. Essa ação pode ser ativada pelo teclado com F5.

Próximo

- Executa a próxima instrução e para quando alcançar a próxima linha nesse arquivo. Alguns depuradores chamam essa ação de "Passar por cima". Essa ação pode ser ativada pelo teclado com F6.

Passo

- Executa a próxima instrução, entrando na função se possível. Alguns depuradores podem chamar essa função de "um passo". Essa ação pode ser ativada pelo teclado com F7.

Sair

- Finaliza a execução da função atual e para quando ela retornar para a função chamada. Essa ação pode ser ativada pelo teclado com Shift F7.

Reiniciar

- Recarrega o executável atual e inicia a execução do começo. Essa ação pode ser ativada pelo teclado com Shift F5.

Parar

- Interrompe manualmente a execução do programa. Essa ação está disponível apenas quando o depurador está executando o executável (ex.: após um usuário ter clicado em Continuar). Essa ação pode ser ativada pelo teclado com F9.

By default, after loading an executable, Nemiver creates a breakpoint at `main()`, so when execution reaches `main()`, it will stop and wait for input. You can then step through the program, examine variables (see nemiver-sect-inspecting-variables), or set additional breakpoints (see nemiver-sect-breakpoints).

### Inspecionando variáveis

Nemiver exibe uma lista de todas as variáveis locais na aba Variáveis do Bloco de status. Caso você queira examinar uma variável diferente (ou até mesmo uma expressão arbitrária), você pode usar o Inspetor de variável. Para trazer o Inspetor de variável, selecione Depurar Inspecionar uma variável. Quando o inspetor de variável aparecer, você verá uma janela semelhante a:

Diálogo do inspetor de variável

Você pode digitar qualquer nome de variável ou uma simples expressão (tal como `pFoo->bar`) em uma caixa de entrada, e se a variável é válida e no escopo, ela vai exibir detalhes sobre aquela expressão.

Alternativamente, se você selecionar o nome de uma variável no editor de código fonte e então inicia o Inspetor de variável, ele vai tentar exibir informação sobre o nome da variável selecionada.

#### Atalho de teclado

Você também pode iniciar o Inspetor de variável pressionando F12.

Nemiver também vai permitir que você exiba uma lista de todas as variáveis globais em um aplicativo em um diálogo separado. Para exibir o diálogo Variáveis globais, selecione Depurar Mostrar variáveis globais ou pressione Ctrl G.

Diálogo de variáveis globais

Para alguns programas (especialmente programas C++), listar todas as variáveis globais pode levar muito tempo.

### Configurando pontos de interrupção

Há várias formas de definir pontos de interrupção no Nemiver. Nemiver define automaticamente um ponto de interrupção em `main()` quando você começa a depurar um novo executável. Se você quiser definir pontos de interrupção adicionais, você pode fazer umas das opções abaixo:

- Clique na margem ao lado da linha na qual você deseja que o ponto de interrupção seja definido

- Place your cursor on a line where you want the breakpoint to be set and set the breakpoint by either selecting Debug Toggle Breakpoint at Cursor, or by pressing F8

- Set a breakpoint at a specific function name or at a specific location in a file by selecting Debug Set Breakpoint... or by pressing Ctrl B. This will bring up a dialog that looks like the following:

  Set Breakpoint Dialog

  You can specify a breakpoint at a particular location in a file, or by function name. If there are more than one function with the same name, Nemiver will display a list of all matching functions and ask you to pick the one you want.

#### Pontos de interrupção desabilitados

Breakpoints can be either enabled or disabled. The debugger will stop execution whenever it reaches an enabled breakpoint but will not be affected by any breakpoints in the disabled state. This allows you to temporarily remove a breakpoint without actually deleting it.

To disable or enable a breakpoint, click the checkbox next to the breakpoint number you want to enable or disable in the Breakpoints tab of the Status Notebook. Alternately, you can press Shift F8 to enable or disable a breakpoint that is set on the line that the cursor is currently on.

The following figures show the difference between enabled and disabled breakpoints in the source editor.

Illustration of an enabled breakpoint

Enabled Breakpoint

Illustration of a disabled breakpoint

Disabled Breakpoint

#### Abrindo arquivos do código fonte

Sometimes you don't know exactly the function name or line number where you want a breakpoint to be set, so you must open a source file to figure it out. You could just open arbitrary files from the filesystem, but Nemiver can also provide a list of source files that were used to build the executable and allow you to select from this list. When you select File Open Source File..., the following window should be displayed:

Shows dialog for opening source files

To select an arbitrary file from the filesystem, choose the Select from Filesystem option. To select from a list of files that produced the executable, choose Select from Target Executable.

##### Determining Source Files for Dynamically Loaded Modules

If the target executable loads modules at runtime (e.g. using `dlopen()`), Nemiver will not be able to determine which files were used to build these modules until they are actually loaded.

### Depuração avançada

#### Registros

The register editing widget is located in the Registers tab of the Status Notebook. Alternately, you can press Alt F5 to jump directly to the correct tab.

The Register Editing Widget

This widget shows the current values of all of the CPU registers. You can edit the register values by clicking in the Value column and entering a new value. If the value for the register changed since the last time the debugger stopped, it will be highlighted in red.

#### Memória

The memory widget allows you to view a section of memory directly. This enables you to get a lower-level view of what's happening while your program is running.

The Memory Editing Widget

To display a segment of memory in the memory view widget, enter a memory address in the Address field. If the address is valid for the program being debugged, the memory view will display the memory values starting at the specified address. Memory values can be displayed in byte format, word format (2 bytes), or long word format (4 bytes) by choosing an option from the Group By drop-down menu. The memory values will automatically be updated as you step through the program.

In addition to viewing the memory values, you can also use the memory widget to modify memory values. You can edit either the hex byte representation (the left-hand section of the memory widget), or the ASCII representation (the right-hand section of the memory widget). All changes will be applied immediately.

## Gravando e restaurando sessões

Nemiver can save your debugging sessions for you so that you can resume them at a later time. This includes saving information such as which executable is being debugged, what environment variables are set, what command-line options are passed to the executable, which files are open, and which breakpoints are set so that you can get back to where you left off last time as quickly as possible.

### Sessões gravadas

Nemiver will save your session automatically on exit, so you don't even have to worry about it. However, if you want to explicitly save the session before closing Nemiver, you can do so by selecting File Save Session To Disk.

### Resumindo sessões gravadas

#### Usando o workbench

Select File Resume Saved Session... and select a session from the list.

##### Caixa de diálogo da sessão

Shows dialog for resuming a saved session

#### A partir da linha de comando

If you know the session ID of the session you want to run, you can start that debugging session from the command line. For example, if you want to run session number 3, you can do so with the following command: `nemiver --session 3`.

## Sobre o Nemiver

Nemiver was written by Dodji Seketeli and Jonathon Jongsma, with contributions from many others. To find more information about Nemiver, please visit the Nemiver project website.

To report a bug or make a suggestion regarding this application or this manual, see the Feedback section of the GNOME User Guide.

This program is distributed under the terms of the GNU General Public license as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. A copy of this license can be found at this link, or in the file COPYING included with the source code of this program.