Uno de mis problemas con el código Perl (en línea de comandos debbugger, perl -d
) es el hecho de que al imprimir erróneamente (a través del comando x
) el contenido de una enorme estructura de datos se congela su terminal para siempre y media mientras se imprimen cientos de páginas de datos. Especialmente si eso ocurre en una red lenta.Limitando la cantidad de información impresa por el depurador Perl
Como tal, me gustaría poder limitar la cantidad de datos que imprime x
.
Veo dos enfoques: estaría dispuesto a probar si alguien sabe cómo hacerlo.
Limita la cantidad de datos que cualquier comando en las impresiones del depurador.
Mejor aún, reemplace de algún modo el comando
x
incorporado con un método personalizado de Perl (que calcularía el "tamaño" de la estructura de datos, y se niega a imprimir su contenido sin confirmación).
estoy pidiendo específicamente "cómo sustituir x
con código personalizado" - la construcción de una suficientemente bueno "es la estructura de datos demasiado grande" método de Perl es algo que probablemente puedo hacer por mi cuenta, sin demasiado esfuerzo, aunque Veo suficientes trampas que impiden que el "perfecto" sea un esfuerzo bastante frustrante. Diablos, simplemente haciendo Data :: Dumper-> Dump y tomando la longitud de la cadena podría hacer el truco :)
Tenga en cuenta que soy perfectamente consciente de cómo evitar manualmente el problema mediante el examen recursivo de las capas de la estructura de datos (por ejemplo, imprimir la referencia, imprimir el recuento de teclas/elementos de matriz, etc.) ... el punto es que quiero evitar escribir sin pensar x $huge_pile_of_data
sin pensar, o tropezar con un error que puebla esa enorme pila de datos en lo que debería ser un escalar.
menudo utilizo el enfoque simple menciona en su pregunta, la adición de dicho ciclo, código que estoy de depuración: 'sub xx {uso de datos :: Dumper; imprimir Dumper (@_)} '. Luego uso 'xx $ foo' dentro del depurador en lugar de' x $ foo'. Como dices, una persona podría hacer 'xx()' más servicio completo al verificar la longitud antes de imprimir. – FMc
@FM - pero esto supone que tienes la previsión de saber que $ foo es grande. Todo mi problema es hacer esto por accidente. – DVK
Lo que estoy sugiriendo no requiere que presumas nada sobre '$ foo'. Más bien, requiere un cambio en el hábito: use 'xx' todo el tiempo, en lugar de' x', principalmente porque la salida de 'Data :: Dumper' es mejor que la salida de' x', pero también porque usa su su propia subrutina de descarga facilita la personalización del comportamiento según lo requiera el problema en cuestión. Solo una idea, por supuesto. – FMc