Debugger - predefined types
Posted: Mon Nov 23, 2009 1:45 pm
by DSP_Programmer
Hello,
(Vista, CL. rev. 3899)
I tried to set up a predefined type for printing selections in hex values. I choose the debugger command to "print /x" and the Expression to "$(Variable)". However, the output is not in hex like the gdb command line output, e.g "print /x my_struct", but in standard integer. Is there any way to change this, so I can print in hex? ( I tried "print /x" and "print \/x" as well)
Re: Debugger - predefined types
Posted: Mon Nov 23, 2009 4:42 pm
by DSP_Programmer
Hello Eran,
here is the full story:
I define a struct like this:
typedef struct
{
unsigned int a;
unsigned short array[20];
unsigned int b;
} MyStruct2;
MyStruct2 my_struct_2;
What I want is to see is the struct exactly the same like in debugger tooltips (if enabled) or in the watch window, but with all values printed as hex.
The tooltip prints everything in signed (is there a way to change the format of the debugger tooltip?).
When adding my_struct_2 to the watches, setting format to "hex" and double click the item, I get the same as the tooltip (no hex values).
If I add a predefined type to the debugger diaolg and add my_struct_2 to the watches as hex(using the predefined typ where the command is set to "print /x"), the debugger log is like this:
DEBUG>>00000992-file-list-exec-source-file
DEBUG>>00000992^done,line="50",file="[snip]main.c",fullname="[snip]main.c",macro-info="0"
DEBUG>>00000993-var-create watch_num_47 * my_struct_2
DEBUG>>00000994-var-set-format watch_num_47 hexadecimal
DEBUG>>00000995-var-evaluate-expression watch_num_47
DEBUG>>00000996-var-delete "watch_num_47"
DEBUG>>00000993^done,name="watch_num_47",numchild="3",value="{...}",type="MyStruct2"
DEBUG>>00000994^done,format="hexadecimal",value="{...}"
DEBUG>>00000995^done,value="{...}"
DEBUG>>00000996^done,ndeleted="1"
If I then double click the item in the watch window I get the same as the tooltip with the debugger log:
DEBUG>>00000997^done,name="var3",numchild="3",value="{...}",type="MyStruct2"
DEBUG>>00000998-var-list-children "var3"
DEBUG>>00000998^done,numchild="3",children=[child={name="var3.a",exp="a",numchild="0",type="unsigned int"},child={name="var3.array",exp="array",numchild="20",type="short unsigned int [20]"},child={name="var3.b",exp="b",numchild="0",type="unsigned int"}]
DEBUG>>00000999-var-evaluate-expression "var3.a"
DEBUG>>00001000-var-evaluate-expression "var3.array"
DEBUG>>00001001-var-evaluate-expression "var3.b"
DEBUG>>00000999^done,value="1"
DEBUG>>00001000^done,value="[20]"
DEBUG>>00001001^done,value="2"
DEBUG>>00001002-var-list-children "var3.array"
DEBUG>>00001002^done,numchild="20",children=[child={name="var3.array.0",exp="0",numchild="0",type="short unsigned int"},child={name="var3.array.1",exp="1",numchild="0",type="short unsigned int"},child={name="var3.array.2",exp="2",numchild="0",type="short unsigned int"},child={name="var3.array.3",exp="3",numchild="0",type="short unsigned int"},child={name="var3.array.4",exp="4",numchild="0",type="short unsigned int"},child={name="var3.array.5",exp="5",numchild="0",type="short unsigned int"},child={name="var3.array.6",exp="6",numchild="0",type="short unsigned int"},child={name="var3.array.7",exp="7",numchild="0",type="short unsigned int"},child={name="var3.array.8",exp="8",numchild="0",type="short unsigned int"},child={name="var3.array.9",exp="9",numchild="0",type="short unsigned int"},child={name="var3.array.10",exp="10",numchild="0",type="short unsigned int"},child={name="var3.array.11",exp="11",numchild="0",type="short unsigned int"},child={name="var3.array.12",exp="12",numchild="0",type="short unsigned int"},child={name="var3.array.13",exp="13",numchild="0",type="short unsigned int"},child={name="var3.array.14",exp="14",numchild="0",type="short unsigned int"},child={name="var3.array.15",exp="15",numchild="0",type="short unsigned int"},child={name="var3.array.16",exp="16",numchild="0",type="short unsigned int"},child={name="var3.array.17",exp="17",numchild="0",type="short unsigned int"},child={name="var3.array.18",exp="18",numchild="0",type="short unsigned int"},child={name="var3.array.19",exp="19",numchild="0",type="short unsigned int"}]
DEBUG>>00001003-var-evaluate-expression "var3.array.0"
DEBUG>>00001004-var-evaluate-expression "var3.array.1"
DEBUG>>00001005-var-evaluate-expression "var3.array.2"
DEBUG>>00001006-var-evaluate-expression "var3.array.3"
DEBUG>>00001007-var-evaluate-expression "var3.array.4"
DEBUG>>00001008-var-evaluate-expression "var3.array.5"
DEBUG>>00001009-var-evaluate-expression "var3.array.6"
DEBUG>>00001010-var-evaluate-expression "var3.array.7"
DEBUG>>00001011-var-evaluate-expression "var3.array.8"
DEBUG>>00001012-var-evaluate-expression "var3.array.9"
DEBUG>>00001013-var-evaluate-expression "var3.array.10"
DEBUG>>00001014-var-evaluate-expression "var3.array.11"
DEBUG>>00001015-var-evaluate-expression "var3.array.12"
DEBUG>>00001016-var-evaluate-expression "var3.array.13"
DEBUG>>00001017-var-evaluate-expression "var3.array.14"
DEBUG>>00001018-var-evaluate-expression "var3.array.15"
DEBUG>>00001019-var-evaluate-expression "var3.array.16"
DEBUG>>00001020-var-evaluate-expression "var3.array.17"
DEBUG>>00001021-var-evaluate-expression "var3.array.18"
DEBUG>>00001022-var-evaluate-expression "var3.array.19"
DEBUG>>00001003^done,value="0"
DEBUG>>00001004^done,value="1"
DEBUG>>00001005^done,value="2"
DEBUG>>00001006^done,value="3"
DEBUG>>00001007^done,value="4"
DEBUG>>00001008^done,value="5"
DEBUG>>00001009^done,value="6"
DEBUG>>00001010^done,value="7"
DEBUG>>00001011^done,value="8"
DEBUG>>00001012^done,value="9"
DEBUG>>00001013^done,value="10"
DEBUG>>00001014^done,value="11"
DEBUG>>00001015^done,value="12"
DEBUG>>00001016^done,value="13"
DEBUG>>00001017^done,value="14"
DEBUG>>00001018^done,value="15"
DEBUG>>00001019^done,value="16"
DEBUG>>00001020^done,value="17"
DEBUG>>00001021^done,value="18"
DEBUG>>00001022^done,value="19"
DEBUG>>00001023-var-delete "var3"
DEBUG>>00001023^done,ndeleted="24"
What I want the output to be is the same as typing the gdb command "print /x my_struct_2" on the command line:
$1 = {
a = 0x1
,
array = {0x0
, 0x1
, 0x2
, 0x3
, 0x4
, 0x5
, 0x6
, 0x7
, 0x8
, 0x9
, 0xa
, 0xb
, 0xc
, 0xd
, 0xe
, 0xf
, 0x10
, 0x11
, 0x12
, 0x13
}
,
b = 0x2
}
Re: Debugger - predefined types
Posted: Thu Nov 26, 2009 5:22 pm
by DSP_Programmer
Hello Eran,
is the "Debugger Command" column evaluated at all for predefined types? Because if I put something like "abc" in it, the watch is ok (like "print variable"). The log output is:
DEBUG>>00001101-var-create watch_num_34 * myVar
DEBUG>>00001102-var-set-format watch_num_34 natural
DEBUG>>00001103-var-evaluate-expression watch_num_34
DEBUG>>00001104-var-delete "watch_num_34"
DEBUG>>00001101^done,name="watch_num_34",numchild="0",value="10",type="int"
DEBUG>>00001102^done,format="natural",value="10"
DEBUG>>00001103^done,value="10"
DEBUG>>00001104^done,ndeleted="1"
Re: Debugger - predefined types
Posted: Fri Nov 27, 2009 1:15 pm
by DSP_Programmer
Hello Eran,
I patched my local sources to get this working. Maybe there is a smarter way, but at least the output is what I expect for single variables.
void DebuggerAsciiViewer::UpdateView(const wxString &expr, const wxString &value)
{
m_textCtrlExpression->SetValue(expr);
wxString evaluated (value);
evaluated.Replace(wxT("\r\n"), wxT("\n"));
evaluated.Replace(wxT("\n,"), wxT(",\n"));
evaluated.Replace(wxT("\n\n"), wxT("\n"));
m_textView->SetReadOnly(false);
m_textView->ClearAll();
// start changes
// m_textView->SetText(evaluated);
{
unsigned long TempLong;
wxString myString = evaluated.AfterLast(wxT(' '));
if(myString.ToULong(&TempLong))
{
evaluated << wxT(" = ") << wxString::Format(_T("0x%X"), TempLong);
m_textView->SetText(evaluated);
}
else
{
m_textView->SetText(evaluated);
}
}
// end changes
m_textView->SetReadOnly(true);
}