समस्या निवारण कारण के लिए, मैं वर्तमान में चल रहे फ़ंक्शन के कॉलर स्टैक को पुनः प्राप्त और प्रिंट करने में सक्षम होना चाहता हूं। मैं निम्नलिखित की कोशिश की है:वर्तमान में चल रहे फ़ंक्शन के ढेर के स्टैक ट्रेस को मैं कैसे पुनर्प्राप्त कर सकता हूं?
/*******************************************************************************
* *
* * 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
और सीपीयू मेहराब है powerpc
आप पश्व-अनुरेखन उपयोग कर सकते हैं() , यदि यह vxworks में उपलब्ध है, तो इसके मैन पेज में एक कामकाजी उदाहरण भी है – Pras
@ हैरी क्या आपके पास surce code और WindRiver Workbench तक पहुंच है? – cerr
@cerr हाँ मेरे पास स्रोत कोड और विंड्रिवर वर्कबेंच – Harry