Skip to content

Commit e5121cc

Browse files
committed
BacktraceScreen UI improvements
* Add spacing to FunctionBar functions * Show "NAME (demangled)" in table heading when in demangled display * Mininum width to the "PATH" table column
1 parent 1a478a0 commit e5121cc

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

BacktraceScreen.c

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ typedef enum BacktracePanelOptions_ {
4747

4848
static 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

5555
static 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

Comments
 (0)