Soy bastante nuevo en Powershell y he escrito algunos scripts bastante grandes, es decir, un script que llama a otros scripts que tienen funciones anidadas en otras funciones. Cuando abro este script, a veces recibo errores que no sé de dónde vinieron. ¿Hay alguna manera fácil de ver dónde terminó este script para poder solucionar el error?Cómo rastrear el flujo de scripts
Respuesta
Se puede utilizar para obtener Set-PsDebug
PowerShell para dar salida a casi todas las líneas que se ejecuta:
Set-PSDebug -Trace 1;
El único inconveniente es que probablemente va a terminar con un montón de salida para vadear ...
Normalmente, el error incluye el script de llamada.
De lo contrario, podría intentar ejecutar el script de Window PowerShell ISE en modo de depuración. Esto le permite usar puntos de interrupción y paso por el código.
Artile sobre el uso del ISE para la depuración:
respecto Arcass
Para la depuración para ver donde están viniendo de su error de depuración Sugiero con el ISE o con PowerGUI.
También puede obtener una transcripción de su secuencia de comandos mediante el cmdlet Start-Transcript
que escribirá toda la actividad de la consola en el archivo. Entonces puede poner declaraciones como Write-Host "Doing XYZ"
y esas aparecerán en el registro de transcripciones.
si se captura excepciones con un intento de captura o utilizar una trampa que puede escribir el número de línea y columna de la excepción así:
$ErrorActionPreference = 'Stop'
trap {
Write-Host "Error on line $($_.InvocationInfo.ScriptLineNumber)"
exit 1
}
try {
Get-Item DoesntExist
} catch {
Write-Host ("Error occurred on line: " + $_.InvocationInfo.ScriptLineNumber)
}
$_.InvocationInfo
tiene otros detalles acerca eran el error está viniendo.
Al establecer $ErrorActionPreference = "Stop"
, se asegura de que cualquier error desencadena el bloque trap{}
, que en este caso escribe la línea a la que llegó y sale el script.
Agregado más sobre el manejo de errores 'trap {}', ya que esto permite la solución de problemas generales de cualquier error sin necesidad de poner 'try {} catch {}' alrededor de demasiadas declaraciones. –
- 1. ¿Cómo depurar y/o rastrear el flujo de ejecución en WebMatrix?
- 2. Cómo rastrear el rendimiento del servidor IIS
- 3. ¿Cómo rastrear el tamaño del mensaje WCF?
- 4. ¿Cómo rastrear el proceso hijo usando strace?
- 5. ¿Cómo rastrear por categoría?
- 6. Cómo rastrear descargas de archivos
- 7. Escribir flujo de PDF en el flujo de respuesta
- 8. ¿Cómo implementar el rastreador de flujo óptico?
- 9. ¿Cómo puedo usar git para rastrear personalizaciones de SRPM?
- 10. ¿Cómo rastrear toda la Wikipedia?
- 11. ¿Cómo rastrear usuarios entre dominios?
- 12. Zend diferentes scripts de vista?
- 13. Analizador de Visual Studio, cómo rastrear el uso de [clr.dll]
- 14. Android: ¿cómo rastrear el origen de una InflateException?
- 15. ¿Cómo puedo rastrear el uso de API en Symfony2?
- 16. Cómo rastrear llamadas de función T-SQL
- 17. Cómo rastrear los problemas de log4net
- 18. ¿Cómo rastrear una fuga de memoria mod_perl?
- 19. cómo rastrear llamada de función en C?
- 20. WCF: ¿Cómo puedo rastrear cuerpos de mensajes?
- 21. Git: rastrear múltiples ramas remotas?
- 22. ¿Cómo puedo rastrear las importaciones de Python?
- 23. Cómo rastrear la pérdida de memoria COM
- 24. ¿Cómo rastrear retweets de un determinado usuario?
- 25. ¿Cómo rastrear dependencias de plugins en maven2?
- 26. Scripts en el paquete python
- 27. ¿Cómo rastrear el script PHP ejecutando un proceso determinado?
- 28. Cómo rastrear dónde se estrelló el programa Xcode
- 29. Creación de scripts para el usuario final
- 30. Cómo rastrear un NaN en C++
Esto es exactamente lo que estaba buscando. Sin embargo, sí veo la gran ventaja de averiguar cómo depurar adecuadamente, así que lo investigaré más adelante. –