CleverRaven/Cataclysm-DDA

debugmsg CTDs if called from within ImGui drawing

Open

#82,138 opened on 2025年7月30日

GitHub で見る
 (2 comments) (0 reactions) (0 assignees)C++ (9,264 stars) (3,991 forks)batch import
(S2 - Confirmed)Code: Infrastructure / Style / Static AnalysisHelp WantedImGui[C++]

説明

Describe the bug

Calling debugmsg directly or through a seperate call from an cataimgui::window causes a CTD

Attach save file

Bladensburg-trimmed.tar.gz (Just a default start where I've accepted a mission to test with the diffs below)

Steps to reproduce

  1. Add a debugmsg or something that will call a debugmsg to an imgui window eg
diff --git a/src/mission_ui.cpp b/src/mission_ui.cpp
index 441b18f37b..8a14e3455d 100644
--- a/src/mission_ui.cpp
+++ b/src/mission_ui.cpp
@@ -304,6 +304,7 @@ void mission_ui_impl::draw_selected_description( std::vector<mission *> missions
         }
         parse_tags( parsed_description, get_player_character(), get_player_character() );
     }
+    debugmsg( "Whoopsie" );
     cataimgui::draw_colored_text( parsed_description, c_unset, table_column_width * 1.15 );
     if( miss->has_deadline() ) {
         const time_point deadline = miss->get_deadline();

or

diff --git a/src/mission_ui.cpp b/src/mission_ui.cpp
index 441b18f37b..8a14e3455d 100644
--- a/src/mission_ui.cpp
+++ b/src/mission_ui.cpp
@@ -304,6 +304,7 @@ void mission_ui_impl::draw_selected_description( std::vector<mission *> missions
         }
         parse_tags( parsed_description, get_player_character(), get_player_character() );
     }
+    get_all_colors().name_to_color( "sasdjasidjasdij", report_color_error::yes );
     cataimgui::draw_colored_text( parsed_description, c_unset, table_column_width * 1.15 );
     if( miss->has_deadline() ) {
         const time_point deadline = miss->get_deadline();
  1. Get to said call in game (eg loading the save provided and opening the Mission window)
  2. CTD (retrying does keep it alive long enough to see the debugmsg if you're lucky but then it still dies)

Expected behavior

At the very least just no CTD, potentially triggering an imgui error that lets you continue instead but ideally the normal proper error prompt + message.

Screenshots

Versions and configuration

  • OS: Windows
    • OS Version: 10.0.19045.6093 (22H2)
  • Game Version: cdda-experimental-2025-07-24-0606-dirty [64-bit]
  • Graphics Version: Tiles
  • Game Language: English [en]
  • Mods loaded: [ Dark Days Ahead [dda], Disable NPC Needs [no_npc_food], Portal Storms Ignore NPCs [personal_portal_storms] ]

Additional context

Callstack with the first diff

cataclysm-tiles.exe!common_assert_to_message_box<wchar_t>(const wchar_t * const expression, const wchar_t * const file_name, const unsigned int line_number, void * const return_address) Line 388
	at minkernel\crts\ucrt\src\appcrt\startup\assert.cpp(388)
cataclysm-tiles.exe!common_assert<wchar_t>(const wchar_t * const expression, const wchar_t * const file_name, const unsigned int line_number, void * const return_address) Line 424
	at minkernel\crts\ucrt\src\appcrt\startup\assert.cpp(424)
cataclysm-tiles.exe!_wassert(const wchar_t * expression, const wchar_t * file_name, unsigned int line_number) Line 444
	at minkernel\crts\ucrt\src\appcrt\startup\assert.cpp(444)
cataclysm-tiles.exe!ImGui::ErrorRecoveryTryToRecoverState(const ImGuiErrorRecoveryState * state_in) Line 10492
	at C:\dev\Cataclysm-DDA\src\third-party\imgui\imgui.cpp(10492)
cataclysm-tiles.exe!ImGui::EndFrame() Line 5542
	at C:\dev\Cataclysm-DDA\src\third-party\imgui\imgui.cpp(5542)
cataclysm-tiles.exe!ImGui::Render() Line 5629
	at C:\dev\Cataclysm-DDA\src\third-party\imgui\imgui.cpp(5629)
cataclysm-tiles.exe!cataimgui::client::end_frame() Line 578
	at C:\dev\Cataclysm-DDA\src\cata_imgui.cpp(578)
cataclysm-tiles.exe!ui_adaptor::redraw_invalidated() Line 474
	at C:\dev\Cataclysm-DDA\src\ui_manager.cpp(474)
cataclysm-tiles.exe!ui_adaptor::redraw() Line 356
	at C:\dev\Cataclysm-DDA\src\ui_manager.cpp(356)
cataclysm-tiles.exe!ui_manager::redraw() Line 519
	at C:\dev\Cataclysm-DDA\src\ui_manager.cpp(519)
cataclysm-tiles.exe!debug_error_prompt(const char * filename, const char * line, const char * funcname, const char * text, bool force) Line 390
	at C:\dev\Cataclysm-DDA\src\debug.cpp(390)
cataclysm-tiles.exe!realDebugmsg(const char * filename, const char * line, const char * funcname, const std::string & text) Line 568
	at C:\dev\Cataclysm-DDA\src\debug.cpp(568)
cataclysm-tiles.exe!realDebugmsg<>(const char * const filename, const char * const line, const char * const funcname, const char * const mes) Line 82
	at C:\dev\Cataclysm-DDA\src\debug.h(82)
cataclysm-tiles.exe!mission_ui_impl::draw_selected_description(std::vector<mission *,std::allocator<mission *>> missions, int & selected_mission) Line 308
	at C:\dev\Cataclysm-DDA\src\mission_ui.cpp(308)
cataclysm-tiles.exe!mission_ui_impl::draw_controls() Line 237
	at C:\dev\Cataclysm-DDA\src\mission_ui.cpp(237)
cataclysm-tiles.exe!cataimgui::window::draw() Line 963
	at C:\dev\Cataclysm-DDA\src\cata_imgui.cpp(963)
cataclysm-tiles.exe!cataimgui::window_impl::{ctor}::__l2::<lambda_1>::operator()(ui_adaptor & __formal) Line 838
	at C:\dev\Cataclysm-DDA\src\cata_imgui.cpp(838)
[External Code]
cataclysm-tiles.exe!ui_adaptor::redraw_invalidated() Line 451
	at C:\dev\Cataclysm-DDA\src\ui_manager.cpp(451)
cataclysm-tiles.exe!ui_manager::redraw_invalidated() Line 524
	at C:\dev\Cataclysm-DDA\src\ui_manager.cpp(524)
cataclysm-tiles.exe!mission_ui::draw_mission_ui() Line 114
	at C:\dev\Cataclysm-DDA\src\mission_ui.cpp(114)
cataclysm-tiles.exe!game::list_missions() Line 366
	at C:\dev\Cataclysm-DDA\src\mission_ui.cpp(366)
cataclysm-tiles.exe!game::do_regular_action(action_id & act, avatar & player_character, const std::optional<coords::coord_point_ob<tripoint,5,0>> & mouse_target) Line 2915
	at C:\dev\Cataclysm-DDA\src\handle_action.cpp(2915)
cataclysm-tiles.exe!game::handle_action() Line 3326
	at C:\dev\Cataclysm-DDA\src\handle_action.cpp(3326)
cataclysm-tiles.exe!do_turn() Line 590
	at C:\dev\Cataclysm-DDA\src\do_turn.cpp(590)
cataclysm-tiles.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 864
	at C:\dev\Cataclysm-DDA\src\main.cpp(864)
[External Code]

コントリビューターガイド