I tried using Mesen to debug an NSF and ran into a few problems. I realize NSF debugging probably isn't a priority (probably very few people do this) but here's my report if you want to take a look:
1. Execution starts in some internal code at $3F00. This puts an added burden of trying to understand this internal code from disassembly (would be better if it starts by breaking at INIT, or during PLAY... ideally the internal code would be a hidden implementation detail.)
2. Parts of the address space aren't viewable in disassembly and don't seem to show up properly in debugger. E.g. near the end of the internal code is JMP ($3E00) but $3E00 resolves to 0. Trying to look at $3E00 in the disassembly shows a gap in the address space there.
3. Banks in the memory display at the bottom seem to perpetually say N/A.
4. I imported a dbg file but all of the labels were $70 higher than they should have been? (I don't know if it's a coincidence that an NSF header has $80 bytes and an NES header has $10?)
5. I had some stuff in a segment with a load address different from its run address (i.e. copy to RAM before running). The address for this stuff was transposed from ~$400 to ~$8070. (That might be its load address +$70 but only the run address is really useful.)
6. Variables directly in RAM seem to be placed correctly.
7. I can't select a range of labels and delete them in the label panel. (Delete is disabled when a range is selected?)
8. Being able to drag a .dbg file onto the debugger might be a nice feature to have.
I've attached the NSF and its DBG file that exhibit this behaviour. The source code for this is here, if needed:
github revision (building it is a bit of a process, but nsf.s ramp.s and nsf.cfg have relevant info)