Ich habe ein Programm in einem Mips-Multicore-System und ich bekomme eine Rückverfolgung von Kern wirklich schwer herauszufinden (zumindest für mich), ich vermute, dass vielleicht einer der anderen Kerne schreiben, um mem aber nicht alle der Stapel beschädigt ist, was es mehr verwirrend für mich macht.
In Frame #2 ist dies NULL und in Frame #0 ist dies ebenfalls NULL (die Ursache des Core-Dumps).
Dies ist (teilweise) die Rückverfolgung:
#0 E::m (this=0x0, string=0x562f148 "", size=202) at E.cc:315
#1 0x00000000105c773c in P::e (this=0x361ecd00, string=0x562f148 "", size=202, offset=28) at P.cc:137
#2 0x00000000105c8c5c in M::e (this=0x0, id=7 '\\a', r=2, string=0x562f148 "", size=202, oneClass=0x562f148 "", secondClass=0x14eff439 "",
offset=28) at M.cc:75
#3 0x0000000010596354 in m::find (this=0x4431fd70, string=0x562f148 "", size=202, oneClass=0x14eff438 "", secondClass=0x14eff439 "",
up=false) at A.cc:458
#4 0x0000000010597364 in A::trigger (this=0x4431fd70, triggerType=ONE, string=0x562f148 "", size=0, up=true) at A.cc:2084
#5 0x000000001059bcf0 in A::findOne (this=0x4431fd70, index=2, budget=0x562f148 "", size=202, up=true) at A.cc:1155
#6 0x000000001059c934 in A::shouldpathNow (this=0x4431fd70, index=2, budget=0x562f148 "", size=202, up=false, startAt=0x0, short=)
at A.cc:783
#7 0x00000000105a385c in A::shouldpath (this=0x4431fd70, index=2, rbudget=, rsize=, up=false,
direct=) at A.cc:1104
Über die Funktion m::find
442 m\_t m::find(unsigned char const \*string, unsigned int size,
443 hClass\_t \*hClass, h\_t \*fHClass,
444 bool isUp) {
445
446
447 const Iterator &it=arr\_\[getIndex()\]->getSearchIterator((char const\*)value, len);
448
449 unsigned int const offset = value - engine\_->getData();
450 451 int ret=UNKNOWN;
452 M \*p;
453 for(const void\* match=it.next();
454 ret == UNKNOWN && match != NULL;
455 match = it.next()){
456 p = (M\*)match;
457 if(p->needMore()){
458 ret = p->e(id\_, getIndex(), value, len, hClass, fHClass, offset);
0 Stimmen
Könnten Sie den Code für
E::m
?0 Stimmen
Dieser Code ist einfach, nur bei init wird versucht, ein Mitglied zu überprüfen: int i; bool evaluating=true; if(member_) { .... }
0 Stimmen
Der Kern passiert bei der <pre> 'if(member_)' </pre>
0 Stimmen
Die interessante Funktion ist
m::find
. Können Sie den Code zeigen (mit Zeilennummern?) Bitte bearbeiten Sie Ihre Frage, fügen Sie keinen Code in Kommentare ein.0 Stimmen
Beachten Sie, dass Debugger in der Regel die Aufrufkonventionen nicht perfekt befolgen, insbesondere wenn der Compiler neuer ist als der Debugger.
0 Stimmen
Was mir auffiel, ist, dass Sie einen Verweis halten, der von einer Funktion in Zeile 447 zurückgegeben wurde, was ich niemals tun würde, da man nie weiß, wie lange dieser Verweis gültig sein wird. Besser ist es, einfach eine Kopie zu erstellen.