Escolar Documentos
Profissional Documentos
Cultura Documentos
org
O depurador Perl
Se você chamar Perl com a opção -d , seu script será executado no depurador de origem Perl. Isso
funciona como um ambiente Perl interativo, solicitando comandos do depurador que permitem
examinar o código-fonte, definir pontos de interrupção, obter retornos de pilha, alterar os valores
das variáveis etc. Isso é tão conveniente que você geralmente aciona o depurador sozinho para
teste Perl constrói interativamente para ver o que eles fazem. Por exemplo:
1. $ perl - d -e 42
No Perl, o depurador não é um programa separado da maneira como costuma ser no ambiente
compilado típico. Em vez disso, o sinalizador -d diz ao compilador para inserir informações de
origem nas árvores de análise que está prestes a ser entregue ao intérprete. Isso significa que seu
código deve primeiro compilar corretamente para que o depurador funcione nele. Então, quando o
intérprete é iniciado, ele pré-carrega um arquivo de biblioteca Perl especial que contém o
depurador.
Qualquer comando não reconhecido pelo depurador é executado diretamente ( eval 'd) como
código Perl no pacote atual. (O depurador usa o pacote DB para manter suas próprias informações
de estado.)
Observe que o dito eval está vinculado por um escopo implícito. Como resultado, qualquer
variável lexical recém-introduzida ou qualquer conteúdo do buffer de captura modificado é
perdido após a avaliação. O depurador é um ambiente agradável para aprender Perl, mas se você
experimenta interativamente o material que deve estar no mesmo escopo, coloque-o em uma
linha.
Chamando o depurador
Existem várias maneiras de chamar o depurador:
perl -d nome_do_programa
No programa especificado identificado por program_name .
perl -d -e 0
Forneça interativamente um expression uso arbitrário -e .
Comandos do depurador
O depurador interativo compreende os seguintes comandos:
h
Imprime uma mensagem de ajuda resumida
h [comando]
Imprime uma mensagem de ajuda para o comando debugger fornecido.
hh
O argumento especial de produz toda a página de ajuda, que é bastante longa. h h
Se a saída do comando (ou qualquer comando, por sinal) passar pela tela, preceda o
comando com um símbolo de canal inicial para que ele passe pelo pager, como em h h
1. DB > | h h
p expr
O mesmo que no pacote atual. Em particular, como essa é apenas a função do Perl , isso
significa que estruturas e objetos de dados aninhados não são descartados, ao contrário
do comando. print {$DB::OUT} expr print x
V [pkg [vars]]
Exiba todas (ou algumas) variáveis no pacote (padrão main ) usando uma impressora bonita
de dados (os hashes mostram suas chaves e valores para que você veja o que é, caracteres de
controle são imprimíveis etc.). Certifique-se de não colocar o especificador de tipo (como $ )
lá, apenas os nomes dos símbolos, como este:
X [vars]
O mesmo que . V currentpackage [vars]
y [nível [vars]]
Exiba todas (ou algumas) variáveis lexicais (mnemônicas: mY variáveis) no escopo atual ou
nos escopos de nível mais altos. Você pode limitar as variáveis que vê com vars, que
funcionam exatamente como nos comandos V e X . Requer
a PadWalker versão do módulo 0.08 ou superior; avisará se isso não estiver instalado. A saída
é bastante impressa no mesmo estilo que para V e o formato é controlado pelas mesmas
opções.
T
Produza um rastreamento de pilha. Veja abaixo os detalhes sobre sua saída.
s [expr]
Único passo. Executa até o início de outra instrução, descendo para chamadas de sub-
rotina. Se for fornecida uma expressão que inclua chamadas de função, ela também será
executada em uma única etapa.
n [expr]
Próximo. Executa sob chamadas de sub-rotina, até o início da próxima instrução. Se for
fornecida uma expressão que inclua chamadas de função, essas funções serão executadas
com paradas antes de cada instrução.
r
Continue até o retorno da sub-rotina atual. Despejar o valor de retorno se a PrintRet opção
estiver configurada (padrão).
<CR>
Repita o último n ou s comando.
c [linha | sub]
Continue, opcionalmente, inserindo um ponto de interrupção único na linha ou sub-rotina
especificada.
eu
Listar a próxima janela de linhas.
l min + incr
Listar linhas começando em . incr+1 min
l min-max
Linhas da lista min através de max . l - é sinônimo de - .
eu linha
Liste uma única linha.
l subname
Listar a primeira janela de linhas da sub-rotina. subname pode ser uma variável que contém
uma referência de código.
https://perldoc.perl.org/perldebug.html 3/18
31/10/2019 perldebug - perldoc.perl.org
v [linha]
Veja algumas linhas de código em torno da linha atual.
.
Retorne o ponteiro do depurador interno para a última linha executada e imprima essa linha.
nome do arquivo f
Alterne para exibir um arquivo ou eval instrução diferente . Se o nome do arquivo não for
um nome de caminho completo encontrado nos valores de% INC, será considerado um
regex.
/padronizar/
Pesquise o padrão (um regex Perl); final / é opcional. A pesquisa não diferencia maiúsculas de
minúsculas por padrão.
?padronizar?
Pesquise para trás o padrão; final ? é opcional. A pesquisa não diferencia maiúsculas de
minúsculas por padrão.
L [abw]
Listar (padrão todas) ações, pontos de interrupção e expressões de observação
S [[!] Regex]
Liste os nomes das sub-rotinas [não] que correspondem ao regex.
t [n]
Alterne para o modo de rastreamento (consulte também a AutoTrace opção). Argumento
opcional é o número máximo de níveis a serem rastreados abaixo do atual; qualquer coisa
mais profunda do que isso ficará em silêncio.
t [n] expr
Rastrear através da execução de expr . O primeiro argumento opcional é o número máximo
de níveis a serem rastreados abaixo do atual; qualquer coisa mais profunda do que isso ficará
em silêncio. Consulte Exemplos de saída da lista de quadros em perldebguts para obter
exemplos.
b
Define o ponto de interrupção na linha atual
b [linha] [condição]
Defina um ponto de interrupção antes da linha especificada. Se uma condição for
especificada, ela será avaliada sempre que a instrução for atingida: um ponto de interrupção
será obtido apenas se a condição for verdadeira. Os pontos de interrupção podem ser
definidos apenas nas linhas que iniciam uma instrução executável. As condições não
usam if :
https://perldoc.perl.org/perldebug.html 4/18
31/10/2019 perldebug - perldoc.perl.org
1. b 237 $ x > 30
2. b 237 ++ $ count237 < 11
3. b 33 / padrão / i
1. b . $ n > 100
b subnome [condição]
Defina um ponto de interrupção antes da primeira linha da sub-rotina
nomeada. subname pode ser uma variável que contém uma referência de código (nesse caso,
a condição não é suportada).
b nome da compilação
Define um ponto de interrupção antes da primeira instrução executada após a compilação da
sub-rotina especificada.
Linha B
Exclua um ponto de interrupção da linha especificada .
B*
Exclua todos os pontos de interrupção instalados.
desativar [linha]
Desative o ponto de interrupção para não interromper a execução do programa. Os pontos
de interrupção são ativados por padrão e podem ser reativados usando o enable comando
ativar [linha]
Habilite o ponto de interrupção para interromper a execução do programa.
um comando [linha]
Defina uma ação a ser executada antes da linha ser executada. Se a linha for omitida, defina
uma ação na linha a ser executada. A sequência de etapas executadas pelo depurador é
Por exemplo, isso imprimirá $ foo toda vez que a linha 53 for passada:
Uma linha
Exclua uma ação da linha especificada.
UMA *
Exclua todas as ações instaladas.
w expr
Adicione uma expressão de observação global. Sempre que um global observado muda, o
depurador para e exibe os valores antigos e novos.
W expr
Excluir expressão de observação
W*
Exclua todas as expressões de observação.
o
Exibe todas as opções.
o booloption ...
Defina cada opção booleana listada para o valor 1 .
o anyoption? ...
Imprima o valor de uma ou mais opções.
https://perldoc.perl.org/perldebug.html 6/18
31/10/2019 perldebug - perldoc.perl.org
pretendem escapar da cotação. em si. Em outras palavras, você segue regras de aspas
simples, independentemente da cotação; por exemplo: ou . o pager="less -
MQeicsNfr" o option='this isn\'t bad' ooption="She said, \"Isn't it?\""
Por razões históricas, =value é opcional, mas o padrão é 1 somente onde é seguro fazê-lo -
ou seja, principalmente para opções booleanas. É sempre melhor atribuir um valor específico
usando = . O option pode ser abreviado, mas para maior clareza provavelmente não
deveria ser. Várias opções podem ser definidas juntas. Consulte Opções configuráveis para
obter uma lista delas.
<?
Liste todas as ações de comando Perl pré-prompt.
<[comando]
Defina uma ação (comando Perl) para ocorrer antes de cada prompt do depurador. Um
comando de várias linhas pode ser inserido com a barra invertida das novas linhas.
<*
Exclua todas as ações de comando Perl pré-prompt.
<< comando
Adicione uma ação (comando Perl) para acontecer antes de cada prompt do depurador. Um
comando de várias linhas pode ser digitado retrocedendo as novas linhas.
>?
Liste as ações do comando Perl pós-prompt.
> comando
Defina uma ação (comando Perl) para ocorrer após o prompt quando você acabou de
fornecer um comando para retornar à execução do script. Um comando de várias linhas pode
ser inserido com uma barra invertida nas novas linhas (apostamos que você não poderia ter
adivinhado isso até agora).
>*
Exclua todas as ações de comando Perl pós-prompt.
>> comando
Adiciona uma ação (comando Perl) para ocorrer após o prompt quando você acabou de
fornecer um comando para retornar à execução do script. Um comando de várias linhas pode
ser inserido com a barra invertida das novas linhas.
{?
Liste os comandos do depurador antes do prompt.
{[comando]
Defina uma ação (comando debugger) para ocorrer antes de cada prompt do depurador. Um
comando de várias linhas pode ser inserido da maneira habitual.
Como esse comando é novo em alguns sentidos, um aviso será emitido se você
aparentemente inserir um bloco acidentalmente. Se é isso que você pretende fazer, escreva
como com ou mesmo . ;{ ... } do { ... }
{*
https://perldoc.perl.org/perldebug.html 7/18
31/10/2019 perldebug - perldoc.perl.org
{{command
Adicione uma ação (comando debugger) a ocorrer antes de cada prompt do depurador. Um
comando de várias linhas pode ser inserido, se você puder adivinhar como: veja acima.
! número
Refaça um comando anterior (o padrão é o comando anterior).
! -número
Refazer o número do comando anterior.
! padronizar
Refaça o último comando iniciado com padrão. Veja também. o recallCommand
!! cmd
Execute o cmd em um subprocesso (lê DB :: IN, grava em DB :: OUT)
Consulte também. Observe que o shell atual do usuário (bem, sua variável) será usado, o que
pode interferir na interpretação adequada do status de saída ou das informações do sinal e
do coreedump. o shellBang $ENV{SHELL}
arquivo fonte
Leia e execute comandos debugger do arquivo . O próprio arquivo pode
conter source comandos.
Número H
Exibe os últimos n comandos. Apenas comandos com mais de um caractere são listados. Se
o número for omitido, liste todos eles.
q ou ^ D
Sair. ("sair" não funciona para isso, a menos que você tenha criado um alias) Essa é a única
maneira suportada de sair do depurador, embora digitar exit duas vezes possa funcionar.
Defina a inhibit_exit opção como 0 se desejar poder finalizar o script. Você também pode
precisar definir $ done como 0 se quiser passar pela destruição global.
R
Reinicie o depurador exec() inserindo uma nova sessão. Tentamos manter seu histórico, mas
configurações internas e opções de linha de comando podem ser perdidas.
| dbcmd
Execute o comando debugger, canalizando DB :: OUT para o seu pager atual.
|| dbcmd
O mesmo que o DB :: OUT também está temporariamente ed. |dbcmd select
= [valor alternativo]
Defina um alias de comando, como
1. = sair q
https://perldoc.perl.org/perldebug.html 8/18
31/10/2019 perldebug - perldoc.perl.org
comando
Execute o comando como uma instrução Perl. Um ponto e vírgula à direita será fornecido. Se
a instrução Perl seria confundida para um depurador Perl, use um ponto e vírgula à esquerda
também.
m expr
Liste quais métodos podem ser chamados no resultado da expressão avaliada. A expressão
pode ser avaliada como uma referência a um objeto abençoado ou a um nome de pacote.
M
Exiba todos os módulos carregados e suas versões.
homem
Apesar do nome, isso chama o visualizador de documentação padrão do sistema na página
fornecida ou no próprio visualizador, se a página de manual for omitida. Se esse visualizador
for man , as Config informações atuais serão usadas para chamar manusando a opção
apropriada MANPATH ou -M manpath . As pesquisas com falha do formulário XXX que
correspondem às páginas de manual conhecidas do
formulário perlXXX serão tentadas novamente. Isso permite digitar ou no
depurador. man debug man op
Opções configuráveis
O depurador tem várias opções configuráveis usando o o comando, de forma interativa ou a
partir do ambiente ou de um arquivo rc. (./.perldb ou ~ / .perldb no Unix.)
pager
Programa a ser usado para saída de comandos canalizados por pager (aqueles que começam
com um | caractere.) Por padrão, será usado. Como o depurador usa as características
atuais do terminal para negrito e sublinhado, se o pager escolhido não passar sequências de
escape inalteradas, a saída de alguns comandos do depurador não será legível quando
enviada pelo pager. $ENV{PAGER}
tkRunning
Execute Tk enquanto solicita (com ReadLine).
https://perldoc.perl.org/perldebug.html 9/18
31/10/2019 perldebug - perldoc.perl.org
Para desativar esse modo de segurança padrão, defina esses valores para algo maior que 0.
No nível 1, você obtém retornos ao receber qualquer tipo de aviso (geralmente irritante) ou
exceção (geralmente valioso). Infelizmente, o depurador não pode discernir exceções fatais
das não fatais. Se dieLevel for igual a 1, suas exceções não fatais também serão rastreadas
e alteradas sem cerimônia se vierem de eval'ed strings ou de qualquer tipo
de eval módulo que você esteja tentando carregar. E se dieLevel é 2, o depurador não se
importa de onde eles vieram: usurpa o manipulador de exceções e imprime um rastreamento
e modifica todas as exceções com seus próprios enfeites. Talvez isso seja útil para alguns fins
de rastreamento, mas tende a destruir irremediavelmente qualquer programa que leve a sério
o tratamento de exceções.
AutoTrace
Modo de rastreamento (semelhante ao t comando, mas pode ser colocado
em PERLDB_OPTS ).
LineInfo
Arquivo ou canal para imprimir as informações do número da linha. Se for um canal
(digamos ), uma mensagem curta será usada. Este é o mecanismo usado para interagir com
um editor escravo ou depurador visual, como o special ou hooks, ou o depurador
gráfico. |visual_perl_db vi emacs ddd
inhibit_exit
Se 0, permite sair do final do script.
PrintRet
Imprima o valor retornado após o r comando, se definido (padrão).
ornaments
Afeta a aparência da tela da linha de comando (consulte Term :: ReadLine ). Atualmente, não
há como desabilitá-las, o que pode tornar ilegíveis algumas saídas em alguns monitores ou
com alguns pagers. Isso é considerado um bug.
frame
Afeta a impressão de mensagens ao entrar e sair das sub-rotinas. Se for falso, as mensagens
serão impressas apenas na entrada. (Imprimir na saída pode ser útil se intercalado com outras
mensagens.) frame & 2
Se , argumentos para funções forem impressos, mais informações sobre contexto e
chamadas. Se , sobrecarregado e d está habilitado nos argumentos impressos. Se , o valor de
retorno da sub-rotina é impresso. frame & 4 frame & 8 stringify tie FETCH frame & 16
maxTraceLen
Comprimento para truncar a lista de argumentos quando o frame bit 4 da opção é definido.
https://perldoc.perl.org/perldebug.html 10/18
31/10/2019 perldebug - perldoc.perl.org
windowSize
Altere o tamanho da janela da lista de códigos (o padrão é 10 linhas).
dumpDepth
Limite a profundidade de recursão a N níveis ao despejar estruturas. Valores negativos são
interpretados como infinito. Padrão: infinito.
globPrint
Se deve imprimir o conteúdo dos globs.
DumpDBFiles
Despejar matrizes contendo arquivos depurados.
DumpPackages
Despejar tabelas de símbolos de pacotes.
DumpReused
Despejar conteúdo de endereços "reutilizados".
UsageOnly
Despejo rudimentar de uso de memória por pacote. Calcula o tamanho total de strings
encontradas nas variáveis do pacote. Isso não inclui léxicos no escopo de arquivo de um
módulo ou perdidos em fechamentos.
HistFile
O caminho do arquivo a partir do qual o histórico (assumindo um back-end Term :: ReadLine
utilizável) será lido na inicialização do depurador e no qual ele será salvo no desligamento
(para persistência nas sessões). Conceito semelhante ao arquivo de Bash . .bash_history
HistSize
A contagem das linhas salvas no histórico (assumindo HistFile acima).
Depois que o arquivo rc é lido, o depurador lê a variável de ambiente e analisa isso como o
restante de uma linha "O ...", como se pode digitar no prompt do depurador. Você pode colocar as
opções de inicialização , , , e lá. $ENV{PERLDB_OPTS} TTY noTTY ReadLine NonStop
https://perldoc.perl.org/perldebug.html 11/18
31/10/2019 perldebug - perldoc.perl.org
seu script será executado sem intervenção humana, colocando informações de rastreamento no
arquivo db.out . (Se você interromper, é melhor redefinir LineInfo para / dev / tty se você espera
ver alguma coisa.)
TTY
O TTY a ser usado para depuração de E / S.
noTTY
Se definido, o depurador entrará no NonStop modo e não se conectará a um TTY. Se
interrompido (ou se o controle for para o depurador via configuração explícita de $ DB ::
signal ou $ DB :: single do script Perl), ele se conectará a um TTY especificado na TTY opção
na inicialização ou a um tty encontrado em tempo de execução usando
o Term::Rendezvous módulo de sua escolha.
Este módulo deve implementar um método nomeado new que retorna um objeto com dois
métodos: IN e OUT . Eles devem retornar identificadores de arquivo a serem usados para
depuração de entrada e saída correspondente. O new método deve inspecionar um
argumento que contenha o valor de na inicialização ou de outra forma. Esse arquivo não é
inspecionado quanto à propriedade adequada, portanto, riscos de segurança são
teoricamente possíveis. $ENV{PERLDB_NOTTY} "$ENV{HOME}/.perldbtty$$"
ReadLine
Se falso, o suporte da linha de leitura no depurador será desativado para depurar aplicativos
que usam eles mesmos o ReadLine.
NonStop
Se definido, o depurador entrará no modo não interativo até ser interrompido ou
programaticamente, definindo $ DB :: signal ou $ DB :: single.
que executa o script de maneira não interativa, imprimindo informações sobre cada entrada em
uma sub-rotina e cada linha executada no arquivo chamado listagem . (Se você interrompê-lo, é
melhor redefinir LineInfo para algo "interativo"!)
Outros exemplos incluem (usando a sintaxe padrão do shell para mostrar configurações de
variáveis de ambiente):
https://perldoc.perl.org/perldebug.html 12/18
31/10/2019 perldebug - perldoc.perl.org
o que pode ser útil para depurar um programa que se usa Term::ReadLine . Não esqueça de
desanexar seu shell do TTY na janela que corresponde a / dev / ttyXX , digamos, emitindo um
comando como
1. $ sleep 1000000
1. DB <8>
ou mesmo
1. DB << 17 >>
onde esse número é o número do comando e que você usaria para acessar com
o mecanismo de histórico semelhante ao csh . Por exemplo, repetiria o comando número 17.
A profundidade dos colchetes angulares indica a profundidade do aninhamento do
depurador. Você pode obter mais de um conjunto de colchetes, por exemplo, se já estiver em
um ponto de interrupção e depois imprimir o resultado de uma chamada de função que
possui um ponto de interrupção, ou se você entrar em uma expressão
por comando. !17 s/n/t expression
1. DB <1> para ( 1 .. 4 ) { \
2. cont : imprime "ok \ n" ; \
3. cont : }
4. Está bem
5. Está bem
6. Está bem
7. Está bem
Observe que esse negócio de escapar de uma nova linha é específico para comandos
interativos digitados no depurador.
Rastreamento de pilha
Aqui está um exemplo de como um backtrace de pilha via T comando pode parecer:
https://perldoc.perl.org/perldebug.html 13/18
31/10/2019 perldebug - perldoc.perl.org
1. DB << 13 >> l
2. 101: @i {@i} = ();
3. 102: b @isa {@ i, $ pack} = ()
4. 103 if (existe $ i {$ prevpack} || existe $ isa {$ pack});
5. 104}
6. 105
7. 106 próximo
8. 107 ==> if (existe $ isa {$ pack});
9. 108
10. 109: a if ($ extra--> 0) {
11. 110:% isa = ($ pacote, 1);
Linhas quebráveis estão marcadas com : . Linhas com pontos de interrupção são marcadas
por b e aquelas com ações por a . A linha que está prestes a ser executada é marcada
por ==> .
Esteja ciente de que o código nas listagens de depurador pode não ser igual ao seu código-
fonte original. Diretivas de linha e filtros de fonte externa podem alterar o código antes que o
Perl o veja, fazendo com que o código se mova de suas posições originais ou assuma formas
totalmente diferentes.
Listagem de quadros
Quando a frame opção é definida, o depurador imprime sub-rotinas inseridas (e
opcionalmente encerradas) em diferentes estilos. Veja perldebguts para exemplos
incrivelmente longos deles.
https://perldoc.perl.org/perldebug.html 14/18
31/10/2019 perldebug - perldoc.perl.org
Se você tiver instruções executáveis em tempo de compilação (como código nos blocos
ou use instruções BEGIN, UNITCHECK e CHECK ), elas não serão interrompidas pelo depurador,
embora os require blocos s e INIT o façam, e as instruções em tempo de compilação possam ser
rastreadas com o AutoTrace conjunto de opções in PERLDB_OPTS ). No seu próprio código Perl,
no entanto, você pode transferir o controle de volta para o depurador usando a seguinte instrução,
que é inofensiva se o depurador não estiver em execução:
1. $ DB :: único = 1 ;
Se você definir $DB::single 2, é equivalente a apenas digitar o n comando, enquanto um valor 1
significa o s comando. A $DB::trace variável deve ser definida como 1 para simular a digitação
do t comando.
Personalização do Depurador
O depurador provavelmente contém ganchos de configuração suficientes para que você nunca
precise modificá-lo. Você pode alterar o comportamento do depurador de dentro do depurador
usando seu o comando, da linha de comando por PERLDB_OPTS meio da variável de ambiente e
dos arquivos de personalização.
Você pode fazer algumas customizações configurando um arquivo .perldb , que contém o código
de inicialização. Por exemplo, você pode criar aliases como estes (o último é aquele que as pessoas
esperam estar lá):
Você pode simular a entrada TTY no depurador adicionando comandos arbitrários ao @DB ::
typeahead. Por exemplo, seu arquivo .perldb pode conter:
https://perldoc.perl.org/perldebug.html 15/18
31/10/2019 perldebug - perldoc.perl.org
O que tentaria definir pontos de interrupção nas linhas 4 e 6 imediatamente após a inicialização do
depurador. Observe que @DB :: typeahead não é uma interface suportada e está sujeita a
alterações em versões futuras.
Se você deseja modificar o depurador, copie o perl5db.pl da biblioteca Perl para outro nome e
corte-o no conteúdo do seu coração. Você desejará definir sua PERL5DB variável de ambiente para
dizer algo como isto:
Como último recurso, você também pode usar PERL5DB para personalizar o depurador, definindo
diretamente variáveis internas ou chamando as funções do depurador.
Observe que quaisquer variáveis e funções que não estão documentadas neste documento (ou
no perldebguts ) são consideradas apenas para uso interno e, como tal, estão sujeitas a alterações
sem aviso prévio.
Também está disponível uma conclusão rudimentar da linha de comando, incluindo variáveis
lexicais no escopo atual, se o PadWalker módulo estiver instalado.
Sem o suporte da Readline, você pode ver os símbolos "^ [[A", "^ [[C", "^ [[B", "^ [[B", "^ [[D" "," ^
H ", ...) ao usar as teclas de seta e / ou a tecla backspace.
Versões recentes do Emacs vêm com um arquivo inicial para fazer o emacs agir como um editor
direcionado à sintaxe que compreende (algumas) as sintaxes do Perl. Veja perlfaq3 .
Os usuários do vi também devem procurar no vim e gvim , a versão com e sem vento, para colorir
as palavras-chave do Perl.
Observe que somente o perl pode realmente analisar o Perl; portanto, todas essas ferramentas
CASE ficam um pouco abaixo da marca, especialmente se você não programar o seu Perl como um
programador em C.
O Perl Profiler
https://perldoc.perl.org/perldebug.html 16/18
31/10/2019 perldebug - perldoc.perl.org
Se você deseja fornecer um depurador alternativo para o Perl executar, chame seu script com dois
pontos e um argumento de pacote fornecido ao sinalizador -d . Os depuradores alternativos do
Perl incluem um gerador de perfil Perl, Devel :: NYTProf , que está disponível separadamente como
uma distribuição CPAN. Para criar um perfil do seu programa Perl no arquivo mycode.pl , digite:
Quando o script termina, o criador de perfil cria um banco de dados com as informações do perfil
que você pode transformar em relatórios usando as ferramentas do criador de perfil. Veja
<perlperf> para detalhes.
VEJA TAMBÉM
Você tem e ativado, não é? use strict use warnings
perldebtut , perldebguts , re , DB , Devel :: NYTProf , Dumpvalue e perlrun .
Ao depurar um script que usa #! e, portanto, é normalmente encontrado em $ PATH, a opção -S faz
com que o perl procure por $ PATH, para que você não precise digitar o caminho
ou . which $scriptname
1. $ perl - Sd foo . pl
INSETOS
Você não pode obter informações do quadro da pilha ou de qualquer forma funções de depuração
que não foram compiladas pelo Perl, como as de extensões C ou C ++.
Se você alterar seus argumentos @_ em uma sub-rotina (como com shift ou pop ), o backtrace
da pilha não mostrará os valores originais.
https://perldoc.perl.org/perldebug.html 17/18
31/10/2019 perldebug - perldoc.perl.org
Se você estiver em uma syscall lenta (como wait ing, accept ing ou read ing do teclado ou de
um soquete) e não tiver configurado seu próprio manipulador, não poderá fazer o CTRL-C retornar
ao depurador , porque o próprio manipulador do depurador não entende que ele precisa gerar
uma exceção para longjmp (3) de syscalls lentos. $SIG{INT} $SIG{INT}
https://perldoc.perl.org/perldebug.html 18/18