由於故障原因,我希望能夠檢索並打印當前運行的函數的調用者堆棧。 我曾嘗試以下:如何檢索當前運行的函數堆棧的堆棧跟蹤?
/*******************************************************************************
* *
* * xxxTracePrint - stack trace print function
* *
* * RETURNS: OK or ERROR
* */
static void xxxTracePrint
(
INSTR *caller,
int func,
int nargs,
int *args
)
{
char buf [250];
int ix;
int len = 0;
len += sprintf (&buf [len], "%#10x: %#10x (", (int)caller, func);
for (ix = 0; ix < nargs; ix++) {
if (ix != 0)
len += sprintf (&buf [len], ", ");
len += sprintf (&buf [len], "%#x", args [ix]);
}
len += sprintf (&buf [len], ")\n");
printf (buf);
}
/*******************************************************************************
* *
* * xxxTrace - stack trace
* *
* * RETURNS: OK or ERROR
* */
int xxxTrace(int tcb)
{
REG_SET regs;
if (tcb == 0)
return (ERROR);
taskRegsGet (tcb, ®s);
trcStack (®s, (FUNCPTR) xxxTracePrint, tcb);
return (OK);
}
void DbgTest(void)
{
xxxTrace(taskIdSelf());
}
,但我得到:
JPAX-DP> DbgTest
trcStack aborted: error in top frame
value = 0 = 0x0
這甚至可能嗎?我怎樣才能做到這一點?我看到,對於taskRegsGet(),他們說:
這個程序只適用於好,如果該任務被稱爲是在一個穩定的, 執行非狀態。例如,自我檢查是不可取的, 因爲結果是不可預測的。
但我應該採用哪種方法?
編譯器是diab
和CPU拱powerpc
您可以使用回溯() ,如果它在vxworks中可用,其手冊頁也有一個工作示例 – Pras
@您是否有權訪問surce代碼和WindRiver Workbench? – cerr
@cerr是的我可以訪問源代碼和Windriver工作臺 – Harry