First, a test case:
sol = NDSolve[{x'[t] == -1/x[t], x[0] == -1}, x, {t, 0, 2}]
NDSolve::ndsz: At t == 0.499999735845871`, step size is effectively zero; singularity or stiff system suspected. >>

Consult What's inside InterpolatingFunction[{{1., 4.}}, <>]? or InterpolatingFunctionAnatomy and you will discover that InterpolatingFunction comes with lots of utilities and methods that give access to a wealth of information. In particular, the method "Domain" will yield the domain of the InterpolatingFunction, which in this case will be the interval over which NDSolve successfully integrated the ODE (up to the point where stiffness stopped it).
{tstart, tstop} = Flatten[x["Domain"] /. sol]
(* {0.`, 0.499999735845871`} *)
A couple of ways to plot. Note for ListLinePlot, you don't need to know the domain; it and ListPlot handle InterpolatingFunction as a special case.
ListLinePlot[x /. sol]
Plot @@ {{x[t], x'[t]} /. First[sol], Flatten@{t, x["Domain"] /. sol}}

By default, going past the ends of the domain results in extrapolation.
Plot[x[t] /. First[sol], {t, 0, 2}]

One can use the option, mentioned in a comment in the linked question, "ExtrapolationHandler" to override the default extrapolation.
sol2 = NDSolve[{x'[t] == -1/x[t], x[0] == -1}, x, {t, 0, 10},
"ExtrapolationHandler" -> {Indeterminate &}];
Plot[x[t] /. First[sol2], {t, 0, 2}]
NDSolve::ndsz: At t == 0.4999997164125506`....

sol = NDSolve[..., x, {t, 0, 100000}]. Thex["Domain"] /. solwill yield{{{0, 49169.954923435114}}}, and you can get the time it stopped. You can also use the optionNDSolve[..., "ExtrapolationHandler" -> {Indeterminate&}]and the solution won't extrapolate; however, it will returnIndeterminate, which may be good or may cause other problems. Without explicit code, we're just guessing. – Michael E2 Jul 04 '15 at 17:43NDSolvefailed. – bbgodfrey Jul 05 '15 at 01:12NDSolve::ndsz. – Michael E2 Jul 05 '15 at 17:46