2017-09-30 5 views
0

Je débogue un programme Go avec beaucoup de goroutines qui semblent bloquer.Stack Trace avec sortie à plusieurs niveaux

Je voudrais avoir une trace de pile quand elle gèle. Mais la sortie est longue et ne correspond pas à ma mémoire tampon. Donc, je veux le sortir dans un fichier. Cependant, si je publie stderr dans un fichier, je ne peux pas (facilement) détecter quand il se bloque.

Je me attendais tee serait bien pour cela:

go test ./foo -v |& tee log.txt

Cependant, quand je frappe Ctrl + Alt + \, pas de sortie de trace de la pile est indiqué, soit dans le terminal ou dans le fichier. D'une certaine manière, il semble qu'il ne survit pas au voyage à travers tee.

Y a-t-il une meilleure façon de le faire?

+0

essayer 'aller tester ./foo -v | tail -f log.txt' – abhink

+0

Un core dump va toujours dans un fichier, mais vous devez régler 'GOTRACEBACK = crash' et utiliser' SIGABRT' – JimB

+0

Toujours? Le core dump va au terminal si stderr va au terminal et je donne 'SIGQUIT'. – lash

Répondre

0

Comme par commentaire de Mark Plotnick, le piégeage du signal SIGQUIT avant que les travaux tee (au moins pour moi):

go test ./foo -v |& { trap "" 3; tee log.txt; }