在Go程序中获取C代码堆栈跟踪

时间:2017-05-01 22:19:42

标签: go

我在Go程序中使用rana/ora oracle驱动程序来查询某些Oracle表。

程序总是在运行一段时间后从C库中获取SIGSEGV并在segfault上退出。它在遇到段错误之前也会获得大量的查询超时(void detectFaces(Context context, Bitmap picture){ com.google.android.gms.vision.face.FaceDetector detector = new com.google.android.gms.vision.face.FaceDetector.Builder(context) .setTrackingEnabled(false) .setClassificationType(com.google.android.gms.vision.face.FaceDetector.ALL_CLASSIFICATIONS) .build(); //Build the frame Frame frame = new Frame.Builder().setBitmap(picture).build(); //Detect the faces SparseArray<Face> faces = detector.detect(frame);//**This takes approx 15 second** if(faces.size() == 0) Toast.makeText(context, "No Face Detected", Toast.LENGTH_SHORT).show(); else { Toast.makeText(context,"Face detected are : " + faces.size() , Toast.LENGTH_LONG).show(); getClassification(faces.valueAt(0)); } //Release the detector detector.release(); } )。

我以非常标准的方式使用驱动程序:

context deadline exceeded

第一个Goroutine的堆栈跟踪是:

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Seconds)
defer cancel()
rows, err := initialedDb.QueryContext(ctx, "sql_query")

我多次检查了我的程序,并且我认为我没有造成任何内存泄漏,双重释放或类似的事情。

我想知道如何调试这个,因为Go并没有给我C的堆栈跟踪。 Valgrind的Memcheck工具会帮助吗?

0 个答案:

没有答案