void frame_get_location(FrameIndex index, SerialNumber *pserial_num, jmethodID *pmethod, jlocation *plocation, jint *plineno) { FrameKey *pkey; FrameInfo *info; jint lineno; pkey = get_pkey(index); *pmethod = pkey->method; *plocation = pkey->location; info = get_info(index); lineno = (jint)info->lineno; if ( info->lineno_state == LINENUM_UNINITIALIZED ) { info->lineno_state = LINENUM_UNAVAILABLE; if ( gdata->lineno_in_traces ) { if ( pkey->location >= 0 && !isMethodNative(pkey->method) ) { lineno = getLineNumber(pkey->method, pkey->location); if ( lineno >= 0 ) { info->lineno = (unsigned short)lineno; /* save it */ info->lineno_state = LINENUM_AVAILABLE; } } } } if ( info->lineno_state == LINENUM_UNAVAILABLE ) { lineno = -1; } *plineno = lineno; *pserial_num = info->serial_num; }
void frame_get_location(FrameIndex index, jmethodID *pmethod, jlocation *plocation, jint *plineno) { FrameKey *pkey; FrameInfo *info; pkey = get_pkey(index); *pmethod = pkey->method; *plocation = pkey->location; info = get_info(index); if ( info->lineno == 0 ) { if ( gdata->lineno_in_traces ) { if ( pkey->location >= 0 && !isMethodNative(pkey->method) ) { info->lineno = getLineNumber(pkey->method, pkey->location); } else { info->lineno = -1; } } } *plineno = info->lineno; }