When an unexpected error occurs, ROX-Lib displays an error box with a short summary message and a Details button. Most errors are not fatal. The summary may tell you what the problem is on its own. For example, 'Permission denied' usually means you tried to save somewhere you shouldn't (you'll also see this if you try to save to a removeable disk without mounting it). In these cases, you can just click OK to continue. If you don't understand the cause of the error from the summary, click on the Details button for more information. The window expands to show more information, and two extra buttons appear: - 'Bug Report' lets you save the information in the window as a text file. You can then email this to the program's author. - 'Forced Quit' quits without saving. Use this only if trying to exit the program normally just brings up another error box. Above the buttons, three new areas appear. The top list shows exactly what the program was doing when the error occurred. Programs work by performing functions and sub-functions (and sub-sub-functions, etc). The first line is the most general task ('run the program'). If we take the example of saving from Edit to somewhere where we don't have write permission, the list shows these functions after dragging the file: ? - the whole program, not a specific function mainloop - repeatedly handling requests from you and other programs drag_data_get - handling a request from the filer to get the dragged data save_to_file - the request is satisfied by saving the data to a file open_private - a new file is opened for writing Note that all of these operations were still on-going. Each line is a part of the task on the line above (creating a new empty file is the first part of saving the data to a file, which is part of responding to the filer's request for data, which is part of running the program). Each of these functions has some information that it is working with. When you select a function in the list at the top, this information (its variables) are shown in the lower list. So, when 'open_private' is selected, we see a single variable: Name Value path '/cdrom/TextFile' This shows the name of the new file that it was trying to create. If you select 'drag_data_get', you'll see a variable called 'uri' with the value 'file:///cdrom/TextFile'. This is where the filer asked the data to be saved to. drag_data_get saw that it was a file location, worked out the filename, and called save_to_file to handle it. Below the list of variables is a prompt (>>>) into which you can type a Python expression. This allows people who know Python to investigate the problem further. The expression is evaluated in the context of the selected stack frame. The stack trace also shows the file and line number of the instruction in each function that was being executed (for all but the last one, this is the instruction that called the function on the line below). Double-click on a line in the stack trace to load the source file into Edit, with the cursor on that line. If after looking at all this information you still don't understand what the problem is, click on Bug Report and save the stack trace somewhere, then email it to the author of the program.