@@ -47,9 +47,9 @@ typedef enum BacktracePanelOptions_ {
4747
4848static const char * const BacktracePanel_options [LAST_PANEL_OPTION ] = {
4949 [OPTION_NAME_DEMANGLE ] = "Demangle" ,
50- [OPTION_NAME_RAW ] = "Raw " ,
50+ [OPTION_NAME_RAW ] = "Mangle " ,
5151 [OPTION_OBJECT_FULL_PATH ] = "Full Path" ,
52- [OPTION_OBJECT_BASENAME ] = "Basename" ,
52+ [OPTION_OBJECT_BASENAME ] = "Basename " ,
5353};
5454
5555static const char * const BacktraceScreenFunctions [] = {
@@ -113,33 +113,29 @@ static void BacktracePanel_displayHeader(BacktracePanel* this) {
113113 const BacktracePanelPrintingHelper * printingHelper = & this -> printingHelper ;
114114 const int displayOptions = this -> displayOptions ;
115115
116- size_t maxFunctionNameLength = printingHelper -> maxFuncNameLen ;
117- if (!!(displayOptions & DEMANGLE_NAME_FUNCTION ) &&
118- printingHelper -> maxDemangledFuncNameLen > 0 ) {
119- maxFunctionNameLength = printingHelper -> maxDemangledFuncNameLen ;
120- }
116+ bool showDemangledNames = (displayOptions & DEMANGLE_NAME_FUNCTION ) &&
117+ printingHelper -> maxDemangledFuncNameLen > 0 ;
121118
122119 size_t maxObjLen = printingHelper -> maxObjNameLen ;
123120 if (!!(displayOptions & SHOW_FULL_PATH_OBJECT )) {
124121 maxObjLen = printingHelper -> maxObjPathLen ;
125122 }
123+ maxObjLen = MAXIMUM (maxObjLen , strlen ("PATH" ));
126124
127125 /*
128126 * The parameters for printf are of type int.
129127 * A check is needed to prevent integer overflow.
130128 */
131129 assert (printingHelper -> maxFrameNumLen <= INT_MAX );
132130 assert (printingHelper -> maxAddrLen <= INT_MAX );
133- assert (printingHelper -> maxDemangledFuncNameLen <= INT_MAX );
134131 assert (maxObjLen <= INT_MAX );
135- assert (maxFunctionNameLength <= INT_MAX );
136132
137133 char * line = NULL ;
138- xAsprintf (& line , "%*s %-*s %-*s %-* s" ,
134+ xAsprintf (& line , "%*s %-*s %-*s %s" ,
139135 (int )printingHelper -> maxFrameNumLen , "#" ,
140136 (int )printingHelper -> maxAddrLen , "ADDRESS" ,
141137 (int )maxObjLen , "PATH" ,
142- (int ) maxFunctionNameLength , "NAME"
138+ (showDemangledNames ? "NAME (demangled)" : "NAME" )
143139 );
144140
145141 Panel_setHeader ((Panel * )this , line );
@@ -248,25 +244,24 @@ static HandlerResult BacktracePanel_eventHandler(Panel* super, int ch) {
248244 switch (ch ) {
249245#if defined(HAVE_DEMANGLING )
250246 case KEY_F (2 ):
247+ * displayOptions ^= DEMANGLE_NAME_FUNCTION ;
251248 if (!!(* displayOptions & DEMANGLE_NAME_FUNCTION )) {
252- * displayOptions &= ~DEMANGLE_NAME_FUNCTION ;
253- FunctionBar_setLabel (super -> defaultBar , KEY_F (2 ), BacktracePanel_options [OPTION_NAME_DEMANGLE ]);
254- } else {
255- * displayOptions |= DEMANGLE_NAME_FUNCTION ;
256249 FunctionBar_setLabel (super -> defaultBar , KEY_F (2 ), BacktracePanel_options [OPTION_NAME_RAW ]);
250+ } else {
251+ FunctionBar_setLabel (super -> defaultBar , KEY_F (2 ), BacktracePanel_options [OPTION_NAME_DEMANGLE ]);
257252 }
258253 this -> super .needsRedraw = true;
254+ BacktracePanel_displayHeader (this );
259255 break ;
260256#endif
261257
262258 case 'p' :
263259 case KEY_F (3 ):
260+ * displayOptions ^= SHOW_FULL_PATH_OBJECT ;
264261 if (!!(* displayOptions & SHOW_FULL_PATH_OBJECT )) {
265- * displayOptions &= ~SHOW_FULL_PATH_OBJECT ;
266- FunctionBar_setLabel (super -> defaultBar , KEY_F (3 ), BacktracePanel_options [OPTION_OBJECT_FULL_PATH ]);
267- } else {
268262 FunctionBar_setLabel (super -> defaultBar , KEY_F (3 ), BacktracePanel_options [OPTION_OBJECT_BASENAME ]);
269- * displayOptions |= SHOW_FULL_PATH_OBJECT ;
263+ } else {
264+ FunctionBar_setLabel (super -> defaultBar , KEY_F (3 ), BacktracePanel_options [OPTION_OBJECT_FULL_PATH ]);
270265 }
271266 this -> super .needsRedraw = true;
272267 BacktracePanel_displayHeader (this );
@@ -415,6 +410,7 @@ static void BacktracePanelRow_displayFrame(const Object* super, RichString* out)
415410 objectDisplayed = frame -> objectPath ;
416411 objectLength = printingHelper -> maxObjPathLen ;
417412 }
413+ objectLength = MAXIMUM (objectLength , strlen ("PATH" ));
418414
419415 size_t maxAddrLen = printingHelper -> maxAddrLen - strlen ("0x" );
420416 char * line = NULL ;
0 commit comments