初级会员
  • 第 5254 位会员
  • highfly43
  • 2016-05-27 02:04:55
  • Offline
  • 0

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • #1 @631768417 主要是这个web的回应要基于后台的返回数据,我直接在controllers函数中等待后台返回数据再进行web回应?还是可以有方法先把controllers函数return,然后等后台返回数据了再回应这个请求(好像controllers函数return后这个web请求链路就断了)
  • #6 @georgehuang 没有,所以做了个比较猥琐的事情。 1. 在自己所有的协程的defer里面控制如果core了就打印栈信息,像这样: defer func() { if err := recover(); err != nil { //打印栈信息 stack := debug.Stack() log.Print(string(stack)) panic(err) //这里也可以温和的自己控制退出 } }() 2. 然后程序core的时候会往标准错误输出栈信息,所以启动的时候把标准错误输出定位到一个文件2>core.info 虽然没有解决用gdb解析core文件的问题,但是只能退而求其次用这种比较ws的方法定位问题了。
  • #2 @jorions 使用gdb调试go代码的时候可以看到栈信息,但是调试core的时候还是一样。。
  • #1 @wslzwps 使用gdb调试go代码的时候可以看到栈信息,但是调试core的时候还是一样。。
  • #2 @highfly43 写了个简单的demo: ```go package main import ( "fmt" "os" "os/signal" "time" ) func dealSignal() { sigChan := make(chan os.Signal) defer close(sigChan) signal.Notify(sigChan) for { sig := <-sigChan fmt.Println("recv sig :", sig) } } func coreFunc() { var mapCore map[int]int //此处会panic mapCore[0] = 1 } func main() { go dealSignal() time.Sleep(3 * time.Second) go coreFunc() time.Sleep(3 * time.Second) } ```