Depurando blocos de código no modo organizacional

11

Existem ferramentas disponíveis para facilitar os erros de rastreamento nos blocos de modo organizacional? (Estou trabalhando especificamente com python)

Meu fluxo de trabalho atual é copiar o código que funciona em um bloco de origem e tentar fazer apenas modificações mínimas. Se ocorrerem erros graves, copio-o novamente para outro arquivo ou emaranho o bloco e depuro o arquivo resultante.

Faltam ferramentas? (por exemplo, algo como o modo de compilação, onde levaria você para a linha em que o erro está.)

Edit: por exemplo, eu encontrei Cc Cv v, que abre um buffer com as referências noweb expandidas. Infelizmente, ele não inclui argumentos de cabeçalho; portanto, o código não pode ser executado sem importar primeiro os do intérprete. Da mesma forma, se eu tiver uma declaração de retorno, ela a impede de ser executada e o buffer não é editável; portanto, são necessárias várias etapas para obter a fonte executável a partir de um bloco python.

user2699
fonte
3
Consulte emacs.stackexchange.com/questions/13244/… . Minha solução favorita atual é (org-src-debug). Isso tem a vantagem de poder depurar blocos de código-fonte com argumentos de entrada.
Tobias
Comentário para outras pessoas com problemas semelhantes: user2699 editou a pergunta para deixar claro que ele deseja depurar blocos de código-fonte python . O último comentário de Tobias se aplica apenas à execução de blocos de código emacs-lisp .
Tobias
1
Você adicionou um :sessioncabeçalho ao seu bloco de código? por exemplo :session *my-python*. Em seguida, observe a execução do script no *my-python*buffer em outro quadro ou janela. Eu acho que você quer algo mais sofisticado do que isso correto?
Melioratus
@Melioratus, é um pouco primitivo (não parece lidar bem com erros e adiciona saída extra no console python), mas é muito melhor que o nada. E o console python é muito bom. Você deve enviá-lo como resposta.
user2699
@ Tobias, obrigado, esse é o tipo de coisa que estou procurando, mas não específica para elisp.
user2699

Respostas:

7

Método 1

  1. Adicione :sessioncabeçalho ao seu bloco de origem.

    No exemplo, o uso do cabeçalho : session executará o código dentro de um buffer chamado *my-python*e exibirá mensagens de depuração.

    #+BEGIN_SRC python :session *my-python*
      'Hello {0}\n'.format('World')
    #+END_SRC
    

    Dicas:

    • Use C-c C-v C-zpara dividir a tela verticalmente e exibir o *my-python*buffer interativo .
    • Use C-c C-v ?para exibir outros atalhos úteis.

Método 2

  1. Coloque o ponto no bloco de código e edite o bloco usando C-c ', ie org-edit-special. Este método permitirá que você use a funcionalidade python-modeincorporada.

  2. Inicie o interpretador python com C-c C-p, que dividirá a janela e abrirá o nome do buffer *Python*. Para alternar para o buffer do interpretador python, pressione C-c C-z.

    Nota: Recentemente, notei que um *Warnings*buffer era exibido. Basta colocar o ponto dentro do *Warnings*buffer e pressionar qpara exibir o *Python*buffer.

  3. Quando terminar, propague seu código atualizado para o bloco de código C-c 'ou descarte qualquer alteração com C-c C-k.


Observe que este código foi testado usando:
versão emacs: GNU Emacs 26.1
versão org-mode: 9.1.14

Melioratus
fonte