Index: ddd/options.C =================================================================== --- ddd/options.C (revision 6900) +++ ddd/options.C (revision 7117) @@ -2347,6 +2347,15 @@ const bool save_geometry = (flags & SAVE_GEOMETRY); const bool interact = (flags & MAY_INTERACT); + if (find_shell() == 0) { + // We cannot use *_app_value() because we have no shell + // available. Presumably we have been called from an error + // handler very early in program startup. + if (interact) + post_error("Cannot save options", "options_save_error"); + return false; + } + string session = (save_session ? app_data.session : DEFAULT_SESSION.chars()); Index: ddd/post.C =================================================================== --- ddd/post.C (revision 6900) +++ ddd/post.C (revision 7117) @@ -355,7 +355,9 @@ dddlog << "! " << text << '\n'; dddlog.flush(); - if (ddd_is_exiting) + // If error occurs very early, we may not even have a command + // shell... + if (ddd_is_exiting || find_shell(w) == 0) { std::cerr << ddd_NAME << ": " << text << "\n"; return 0; Index: ddd/file.C =================================================================== --- ddd/file.C (revision 6900) +++ ddd/file.C (revision 7117) @@ -683,6 +683,16 @@ running(false), state() { + if (!source_view || !gdb) { + post_error("Cannot create ProgramInfo, no source view.", + "no_source_error"); + return; + } + if (!source_view || !gdb) { + post_error("Cannot create ProgramInfo, no debugger agent.\n", + "gdb_io_error"); + return; + } if (source_view->have_exec_pos()) { state = "has stopped";