Output automatic time steps taken by solvers while specifying `saveat`

Many solvers in OrdinaryDiffEq.jl for solving stiff ODEs use automatic time-stepping. From what I understand, if I specify saveat, then sol.t is the time steps I specify in saveat, and if I leave saveat untouched, then sol.t is the time steps taken by the solver. Is there a way save the automatic time steps chosen by the solver, and output the solutions for only the specified time (given through saveat)? A slightly question is what’s the way to do solution handling (e.g. computing the maximum and minimum) during the computation at the automatic time steps chosen by the solver.

For example, suppose the solver automatically chooses some time steps (let’s call them t_auto). I want to know t_auto, and preferably maximum(u), minimum(u), f(t,u,par) (for some user-defined function f) at t_auto, but I don’t need the full solution u at t_auto (because of memory issue for instance). However, I do want to know the full solution u at the user-specified times given through saveat. What’s the appropriate way to handle this?

save_everystep=true, saveat = x

Use a discrete callback where the condition is always true.

FunctionCallingCallback, SavingCallback.