Wireshark Dissector: How to Identify Missing UDP Frames?

You should keep in mind that Wireshark does dissection multiple times. First time it dissects packets in strict order when you load file. Then it calls dissectors when you scroll packet_tree_view or select a packet to build it's tree.

You can check if a dissector is called fot ther first time:

 if (PINFO_IS_VISITED(pinfo)) { ... };

Your dissector should behave differently for the first and for the next dissections.

At first dissection you have to store some information for each packet (in a hash table for example) as it's sequence number and if it is out of order. You will need it to build packet tree properly when you are called second time.