well, somehow the geomData.formattedText was null, so I kinda have a workaround by encapsulate the whole GetMeshDimensionsForString in conditional:
if(str != null)
{
//2d toolkit content
}
else return Vector2.zero
the strange thing is, the textmesh that fire an error have an initial text, and then I change the text to another string that is not null, so formattedText == null should've never happened, but it did.
EDIT: no luck, the error goes somewhere else, and the text indeed disappear. something must've happened when formatting the text that it set the formatted text to null even though the data is not.
EDIT2: ok, my fault, unity somehow set a class that are supposed to be null to non-null since the class only contain primitive (integer & string)