Nintendulator can do this. Debug, disassembly.
Put a breakpoint at some address slightly before you know the crash happens. If you don't know a repeatable way to cause the crash, go to the game state where it usually happens. Title screen? By this one wall? Go there.
Press step. Then start log. Run. If you know how to cause the crash, do it now. If you don't, have plenty of harddrive space and do stuff until it does happen.
when it happens, click stop logging. Look in Nintendulator's save directory, and you'll see a file with a name like (romname).20120312_175801.debug.
Open that in a text editor, go to the end and work backwards. SP is the current stack pointer.
Edit: I suppose that won't show the actual contents of the stack. You can step through the code and look at the CPU memory in the window, or you can try something like FCEUX which allows the CPU memory to be viewed while the game is running at full speed.
edit 2: FCEUX has the exact feature you want. It's just not in the debugger, so I didn't see it.
Its trace logger can log the last X instructions to a window for you, and it has a "break on bad opcode" option in the debugger so you can get it to stop the moment is starts executing data as code.