2017-03-17 3 views
1

J'espérais que quelqu'un pourrait m'expliquer un petit détail de la trace de la pile de Golang, qui a été la plupart du temps ignorée par les tutoriels que j'ai lus. Exemple d'une trace de la pile je me suis:Détails de trace de la pile Golang

 

    goroutine 6 [running]: 
    net/http.(*conn).serve.func1(0xc42005ad00) 
     /usr/local/go/src/net/http/server.go:1491 +0x12a 
    panic(0x8079e0, 0xc42000c0c0) 
     /usr/local/go/src/runtime/panic.go:458 +0x243 
    usos-shop-back/usosapi.GetJson(0x0, 0x7d7820, 0xc4202f6d00, 0x0, 0x0) 
     /root/go/src/usos-shop-back/usosapi/usos-hackery.go:20 +0x38 
    ... 
    ... 
    ... 

Je suis vraiment curieux de savoir quel est le sens de +0x12a, +0x243, +0x38 après le numéro d'une ligne dans le code où l'erreur est survenue.

Merci, R.C.

P.S .: la panique a été provoquée par un pointeur null à func GetJson(*http.Response, interface{}) error

+2

C'est la différence entre le PC de la pile et le PC d'entrée de la fonction. (le format de trace de pile spécifique à l'implémentation n'est probablement pas un bon sujet de question pour StackOverflow) – JimB

+0

@JimB, merci, j'ai quelques articles à lire. Cependant, j'aimerais savoir pourquoi ce n'est pas un bon sujet de discussion pour SO? Cela mène-t-il à des guerres de flamme? Il y a un autre XYZexchange pour ça? –

+1

Cette rubrique est plus d'une zone grise, principalement parce que les détails d'implémentation peuvent ne pas s'appliquer à toutes les implémentations populaires, peuvent changer et parfois changer assez rapidement, laissant les questions ou réponses périmées et/ou trompeuses. Ce n'est pas que le format de trace de la pile est susceptible de changer à ce stade pour go1, mais par exemple une autre sortie GODEBUG a changé de manière significative entre les versions, car elle doit refléter l'implémentation. – JimB

Répondre

0

Il est la différence entre la trame de pile PC et l'entrée de la fonction PC.
grâce à JimB