我在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工具会帮助吗?