、私は、現在実行中の関数の呼び出し元のスタックを盗んして印刷できるようにしたいと思います。 私は、次の試してみました:現在実行中の関数のスタックのスタックトレースを取得するにはどうすればよいですか?トラブルシューティングのため
/*******************************************************************************
* *
* * 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の中にその利用可能な場合、そのmanページには、作業例を持って、あまりにも – Pras
@Harryあなたはsurceコード&WindRiver社ワークベンチへのアクセス権を持っているのですか? – cerr
@cerrはい、私はあなたを助けることができるかもしれないソースコードとWinDriverのワークベンチ – Harry