Guest User

Tobi

a guest
Nov 26th, 2008
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.37 KB | None | 0 0
  1. Spring 0.77b5 infinite loop in real game, possibility to attach debugger
  2.  
  3. (gdb) bt
  4. #0 ListErase<CObject*> (list=@0xfe545f4, what=@0xbfbe4334) at /usr/include/c++/4.2/bits/stl_list.h:142
  5. #1 0x08518ef8 in ~CObject (this=0x132bed20) at /home/tobi/wd/spring/spring_0.77b5/rts/System/Object.cpp:45
  6. #2 0x0842e7c8 in ~CExploSpikeProjectile (this=0x132bed20) at /home/tobi/wd/spring/spring_0.77b5/rts/Sim/Projectiles/Unsynced/ExploSpikeProjectile.cpp:50
  7. #3 0x083e1f31 in CProjectileHandler::Update (this=0x91fd660) at /home/tobi/wd/spring/spring_0.77b5/rts/Sim/Projectiles/ProjectileHandler.cpp:427
  8. #4 0x080a749d in CGame::SimFrame (this=0x8a2be08) at /home/tobi/wd/spring/spring_0.77b5/rts/Game/Game.cpp:3176
  9. #5 0x080b8d34 in CGame::ClientReadNet (this=0x8a2be08) at /home/tobi/wd/spring/spring_0.77b5/rts/Game/Game.cpp:3574
  10. #6 0x080bc7c9 in CGame::Update (this=0x8a2be08) at /home/tobi/wd/spring/spring_0.77b5/rts/Game/Game.cpp:2469
  11. #7 0x0850336b in SpringApp::Update (this=0xbfbe508c) at /home/tobi/wd/spring/spring_0.77b5/rts/System/SpringApp.cpp:884
  12. #8 0x0850a195 in SpringApp::Run (this=0xbfbe508c, argc=2, argv=0xbfbe5174) at /home/tobi/wd/spring/spring_0.77b5/rts/System/SpringApp.cpp:1125
  13. #9 0x084f2a5a in Run (argc=2, argv=0xbfbe5174) at /home/tobi/wd/spring/spring_0.77b5/rts/System/Main.cpp:60
  14. #10 0x084f2bc2 in main (argc=252574672, argv=0xdec7360) at /home/tobi/wd/spring/spring_0.77b5/rts/System/Main.cpp:111
  15.  
  16. CObject::~CObject()
  17. {
  18. std::list<CObject*>::iterator di;
  19. for(di=listeners.begin();di!=listeners.end();++di){
  20. m_setOwner(__FILE__, __LINE__, __FUNCTION__);
  21. (*di)->DependentDied(this);
  22. m_setOwner(__FILE__, __LINE__, __FUNCTION__);
  23. ListErase<CObject*>((*di)->listening, this);
  24. }
  25. for(di=listening.begin();di!=listening.end();++di){
  26. m_setOwner(__FILE__, __LINE__, __FUNCTION__);
  27. ListErase<CObject*>((*di)->listeners, this); // <-- crash on this line
  28. }
  29. m_resetGlobals();
  30. }
  31.  
  32. So it loops through this->listening, and for each listening item it erases "this" from the listeners.
  33.  
  34. (gdb) up
  35. #1 0x08518ef8 in ~CObject (this=0x132bed20) at /home/tobi/wd/spring/spring_0.77b5/rts/System/Object.cpp:45
  36. 45 ListErase<CObject*>((*di)->listeners, this);
  37. (gdb) p listening
  38. $81 = {<std::_List_base<CObject*,std::allocator<CObject*> >> = {
  39. _M_impl = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  40. _M_next = 0xcf2ac40, _M_prev = 0xcf2ac40}}}, <No data fields>}
  41. (gdb) p listeners
  42. $82 = {<std::_List_base<CObject*,std::allocator<CObject*> >> = {
  43. _M_impl = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  44. _M_next = 0x132bed24, _M_prev = 0x132bed24}}}, <No data fields>}
  45.  
  46. Does this mean no nodes in both of these lists?
  47.  
  48. (gdb) p *0x132bed24
  49. $83 = 321645860
  50. (gdb) p **0x132bed24
  51. $84 = 321645860
  52. (gdb) p ***0x132bed24
  53. $85 = 321645860
  54. (gdb) p ****0x132bed24
  55. $86 = 321645860
  56.  
  57. Seems right. (std::list probably uses a special end node. May even be a circular list.)
  58.  
  59. (gdb) p *0xcf2ac40
  60. $87 = 321645868
  61. (gdb) p **0xcf2ac40
  62. $88 = 217230400
  63. (gdb) p ***0xcf2ac40
  64. $89 = 321645868
  65. (gdb) p ****0xcf2ac40
  66. $90 = 217230400
  67.  
  68. Or not? (Iterating over two nodes when following next pointers)
  69.  
  70.  
  71.  
  72. The node:
  73.  
  74. (gdb) pt std::_List_node<CObject*>
  75. type = class std::_List_node<CObject*> : public std::_List_node_base {
  76. public:
  77. CObject *_M_data;
  78. }
  79. (gdb) pt std::_List_node_base
  80. type = class std::_List_node_base {
  81. public:
  82. std::_List_node_base *_M_next;
  83. std::_List_node_base *_M_prev;
  84.  
  85. static void swap(std::_List_node_base&, std::_List_node_base&);
  86. void transfer(std::_List_node_base*, std::_List_node_base*);
  87. void reverse();
  88. void hook(std::_List_node_base*);
  89. void unhook();
  90. }
  91.  
  92. Assumption that next is first memory location of node is right.
  93.  
  94.  
  95. The list:
  96.  
  97. (gdb) pt std::_List_base<CObject*,std::allocator<CObject*> >
  98. type = class std::_List_base<CObject*,std::allocator<CObject*> > {
  99. protected:
  100. std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl _M_impl;
  101.  
  102. class std::_List_node<CObject*> * _M_get_node();
  103. void _M_put_node(std::_List_node<CObject*>*);
  104. public:
  105. std::allocator<std::_List_node<CObject*> > & _M_get_Node_allocator();
  106. const std::allocator<std::_List_node<CObject*> > & _M_get_Node_allocator() const;
  107. std::allocator<CObject*> _M_get_Tp_allocator() const;
  108. std::allocator<CObject*> get_allocator() const;
  109. void _List_base(const std::allocator<CObject*> &);
  110. ~_List_base(int);
  111. void _M_clear();
  112. void _M_init();
  113. }
  114. (gdb) pt std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl
  115. type = class std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl : public std::allocator<std::_List_node<CObject*> > {
  116. public:
  117. std::_List_node_base _M_node;
  118.  
  119. void _List_impl(const std::allocator<std::_List_node<CObject*> > &);
  120. }
  121. (gdb) p sizeof(std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl)
  122. $91 = 8
  123.  
  124. So a list always has a single _List_node_base and 0..n _List_nodes.
  125.  
  126.  
  127. H: would it be possible listening is corrupt because of the extra node found earlier (to which prev doesn't point?)
  128.  
  129. (gdb) p &listeners._M_impl
  130. $108 = (std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl *) 0x132bed24
  131. (gdb) p listeners._M_impl
  132. $109 = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  133. _M_next = 0x132bed24, _M_prev = 0x132bed24}}
  134.  
  135. (gdb) p listening._M_impl
  136. $110 = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  137. _M_next = 0xcf2ac40, _M_prev = 0xcf2ac40}}
  138. (gdb) p &listening._M_impl
  139. $111 = (std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl *) 0x132bed2c
  140.  
  141. This makes sense.
  142. listening contains a single node and is not corrupt at all. (special node <-> single value node <-> special node: special node marks begin and end)
  143. listeners is an empty list. (special node -> special node)
  144.  
  145. H rejected.
  146.  
  147.  
  148. Let's examine the CObject that's in there:
  149.  
  150. (gdb) p {class CObject*} (0xcf2ac40+8)
  151. $99 = (CObject *) 0xfe545f0
  152.  
  153. (gdb) p {class CObject*} (321645868+8)
  154. $102 = (CObject *) 0x0
  155.  
  156. (gdb) p*$99
  157. $105 = {_vptr.CObject = 0x860fb68, static binder = {class_ = 0x873de20, base = 0x0, flags = creg::CF_None, memberRegistrator = 0x872a7e0, name = 0x86184b4 "CObject", size = 20,
  158. constructor = 0x85189a0 <CObject::_ConstructInstance(void*)>, destructor = 0x8518970 <CObject::_DestructInstance(void*)>, nextBinder = 0x872a8e0},
  159. static memberRegistrator = 0x872a824, listeners = {<std::_List_base<CObject*,std::allocator<CObject*> >> = {
  160. _M_impl = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  161. _M_next = 0xf0dfbd0, _M_prev = 0xdec7360}}}, <No data fields>}, listening = {<std::_List_base<CObject*,std::allocator<CObject*> >> = {
  162. _M_impl = {<std::allocator<std::_List_node<CObject*> >> = {<__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>}, _M_node = {
  163. _M_next = 0xfe545fc, _M_prev = 0xfe545fc}}}, <No data fields>}}
  164. (gdb) p this
  165. $106 = (CObject * const) 0x132bed20
  166.  
  167. What is it? Use CREG (reflection for C++, basically, made for Spring) to find out.
  168.  
  169. (gdb) call $99->GetClass()
  170. $112 = (class creg::Class *) 0x873d560
  171. (gdb) p *$112
  172. $114 = {members = {<std::_Vector_base<creg::Class::Member*,std::allocator<creg::Class::Member*> >> = {
  173. _M_impl = {<std::allocator<creg::Class::Member*>> = {<__gnu_cxx::new_allocator<creg::Class::Member*>> = {<No data fields>}, <No data fields>}, _M_start = 0x8753558,
  174. _M_finish = 0x87537fc, _M_end_of_storage = 0x8753958}}, <No data fields>}, derivedClasses = {<std::_Vector_base<creg::Class*,std::allocator<creg::Class*> >> = {
  175. _M_impl = {<std::allocator<creg::Class*>> = {<__gnu_cxx::new_allocator<creg::Class*>> = {<No data fields>}, <No data fields>}, _M_start = 0x87578d8, _M_finish = 0x87578e4,
  176. _M_end_of_storage = 0x87578e8}}, <No data fields>}, binder = 0x871a940, name = {static npos = 4294967295,
  177. _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x87511fc "CUnit"}}, base = 0x873caa8,
  178. serializeProc = NULL, postLoadProc = 0x844d860 <CUnit::PostLoad()>}
  179.  
  180. A CUnit. What is it?
  181.  
  182. (gdb) p {class CUnit*} $99
  183. $115 = (CUnit *) 0x860fb68
  184. (gdb) p $115->unitDef->humanName
  185. Cannot access memory at address 0x726f7469
  186. (gdb) p $115->unitDef->name
  187. Cannot access memory at address 0x726f7465
  188.  
  189. Starts to get dodgy... probably not a unit anyway. Check with gdb.
  190.  
  191. (gdb) p $99
  192. $129 = (CObject *) 0xfe545f0
  193. (gdb) set print object on
  194. (gdb) p $99
  195. $130 = (CUnit *) 0xfe545f0
  196.  
  197. CUnit after all.
  198.  
  199. (gdb) p $130->unitDef->humanName
  200. $133 = {_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xab249ec "Krogoth"}}
  201.  
  202. Kroggie. The one which was being built for a long time already in the game, probably.
  203.  
  204. (gdb) set print pretty on
  205. (gdb) p *$130
  206. $137 = (CUnit) {
  207. <CSolidObject> = {
  208. <CWorldObject> = {
  209. <CObject> = {
  210. _vptr.CObject = 0x860fb68,
  211. listeners = {
  212. <std::_List_base<CObject*,std::allocator<CObject*> >> = {
  213. _M_impl = {
  214. <std::allocator<std::_List_node<CObject*> >> = {
  215. <__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>},
  216. members of std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl:
  217. _M_node = {
  218. _M_next = 0xf0dfbd0,
  219. _M_prev = 0xdec7360
  220. }
  221. }
  222. }, <No data fields>},
  223. listening = {
  224. <std::_List_base<CObject*,std::allocator<CObject*> >> = {
  225. _M_impl = {
  226. <std::allocator<std::_List_node<CObject*> >> = {
  227. <__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>},
  228. members of std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl:
  229. _M_node = {
  230. _M_next = 0xfe545fc,
  231. _M_prev = 0xfe545fc
  232. }
  233. }
  234. }, <No data fields>}
  235. },
  236. members of CWorldObject:
  237. id = 6988,
  238. pos = {
  239. <SFloat3> = {
  240. x = 324.25,
  241. y = 141.09375,
  242. z = 1272
  243. },
  244. },
  245. radius = 69.301239,
  246. sqRadius = 4802.66162,
  247. drawRadius = 69.301239,
  248. useAirLos = false,
  249. alwaysVisible = false
  250. },
  251. members of CSolidObject:
  252. ---Type <return> to continue, or q <return> to quit---
  253. mass = 100000,
  254. blocking = true,
  255. floatOnWater = false,
  256. isUnderWater = false,
  257. immobile = false,
  258. blockHeightChanges = false,
  259. xsize = 6,
  260. ysize = 6,
  261. height = 116.674454,
  262. heading = {
  263. <CSyncedPrimitiveBase> = {<No data fields>},
  264. members of SyncedPrimitive<short int>:
  265. x = 16384
  266. },
  267. physicalState = CSolidObject::OnGround,
  268. midPos = {
  269. x = {
  270. <CSyncedPrimitiveBase> = {<No data fields>},
  271. members of SyncedPrimitive<float>:
  272. x = 324.25
  273. },
  274. y = {
  275. <CSyncedPrimitiveBase> = {<No data fields>},
  276. members of SyncedPrimitive<float>:
  277. x = 199.225067
  278. },
  279. z = {
  280. <CSyncedPrimitiveBase> = {<No data fields>},
  281. members of SyncedPrimitive<float>:
  282. x = 1272
  283. }
  284. },
  285. isMoving = false,
  286. residualImpulse = {
  287. <SFloat3> = {
  288. x = 0,
  289. y = 0,
  290. z = 0
  291. },
  292. },
  293. mobility = 0xf0a0430,
  294. mapPos = {
  295. x = 38,
  296. y = 156
  297. },
  298. yardMap = 0x0,
  299. ---Type <return> to continue, or q <return> to quit---
  300. buildFacing = 1,
  301. isMarkedOnBlockingMap = true,
  302. speed = {
  303. <SFloat3> = {
  304. x = 0,
  305. y = 0,
  306. z = 0
  307. },
  308. }
  309. },
  310. members of CUnit:
  311. unitDef = 0x9e79fcc,
  312. collisionVolume = 0xfeee788,
  313. unitDefName = {
  314. _M_dataplus = {
  315. <std::allocator<char>> = {
  316. <__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
  317. members of std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider:
  318. _M_p = 0x9327ccc "core_krogoth"
  319. }
  320. },
  321. modParams = {
  322. <std::_Vector_base<float,std::allocator<float> >> = {
  323. _M_impl = {
  324. <std::allocator<float>> = {
  325. <__gnu_cxx::new_allocator<float>> = {<No data fields>}, <No data fields>},
  326. members of std::_Vector_base<float,std::allocator<float> >::_Vector_impl:
  327. _M_start = 0x0,
  328. _M_finish = 0x0,
  329. _M_end_of_storage = 0x0
  330. }
  331. }, <No data fields>},
  332. modParamsMap = {
  333. _M_t = {
  334. _M_impl = {
  335. <std::allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {
  336. <__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >> = {<No data fields>}, <No data fields>},
  337. members of std::_Rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>,std::_Select1st<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> > >::_Rb_tree_impl<std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,false>:
  338. _M_key_compare = {
  339. <std::binary_function<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>}, <No data fields>},
  340. _M_header = {
  341. ---Type <return> to continue, or q <return> to quit---
  342. _M_color = std::_S_red,
  343. _M_parent = 0x0,
  344. _M_left = 0xfe546a0,
  345. _M_right = 0xfe546a0
  346. },
  347. _M_node_count = 0
  348. }
  349. }
  350. },
  351. team = 4,
  352. allyteam = 1,
  353. lineage = 4,
  354. aihint = 244,
  355. frontdir = {
  356. x = {
  357. <CSyncedPrimitiveBase> = {<No data fields>},
  358. members of SyncedPrimitive<float>:
  359. x = 1
  360. },
  361. y = {
  362. <CSyncedPrimitiveBase> = {<No data fields>},
  363. members of SyncedPrimitive<float>:
  364. x = 0
  365. },
  366. z = {
  367. <CSyncedPrimitiveBase> = {<No data fields>},
  368. members of SyncedPrimitive<float>:
  369. x = -4.37113883e-08
  370. }
  371. },
  372. rightdir = {
  373. x = {
  374. <CSyncedPrimitiveBase> = {<No data fields>},
  375. members of SyncedPrimitive<float>:
  376. x = 4.37113883e-08
  377. },
  378. y = {
  379. <CSyncedPrimitiveBase> = {<No data fields>},
  380. members of SyncedPrimitive<float>:
  381. x = -0
  382. },
  383. z = {
  384. <CSyncedPrimitiveBase> = {<No data fields>},
  385. members of SyncedPrimitive<float>:
  386. x = 1
  387. }
  388. ---Type <return> to continue, or q <return> to quit---
  389. },
  390. updir = {
  391. x = {
  392. <CSyncedPrimitiveBase> = {<No data fields>},
  393. members of SyncedPrimitive<float>:
  394. x = 0
  395. },
  396. y = {
  397. <CSyncedPrimitiveBase> = {<No data fields>},
  398. members of SyncedPrimitive<float>:
  399. x = 1
  400. },
  401. z = {
  402. <CSyncedPrimitiveBase> = {<No data fields>},
  403. members of SyncedPrimitive<float>:
  404. x = 0
  405. }
  406. },
  407. upright = true,
  408. relMidPos = {
  409. x = {
  410. <CSyncedPrimitiveBase> = {<No data fields>},
  411. members of SyncedPrimitive<float>:
  412. x = 0
  413. },
  414. y = {
  415. <CSyncedPrimitiveBase> = {<No data fields>},
  416. members of SyncedPrimitive<float>:
  417. x = 58.1313248
  418. },
  419. z = {
  420. <CSyncedPrimitiveBase> = {<No data fields>},
  421. members of SyncedPrimitive<float>:
  422. x = 0
  423. }
  424. },
  425. deathSpeed = {
  426. <SFloat3> = {
  427. x = 0,
  428. y = 0,
  429. z = 0
  430. },
  431. },
  432. travel = 0,
  433. travelPeriod = 0,
  434. power = 33321.668,
  435. ---Type <return> to continue, or q <return> to quit---
  436. maxHealth = 105250,
  437. health = 104253.367,
  438. paralyzeDamage = 0,
  439. captureProgress = 0,
  440. experience = 0,
  441. limExperience = 0,
  442. neutral = false,
  443. soloBuilder = 0x0,
  444. beingBuilt = true,
  445. lastNanoAdd = 92484,
  446. repairAmount = 0,
  447. transporter = 0x0,
  448. toBeTransported = false,
  449. buildProgress = 0.990848303,
  450. groundLevelled = true,
  451. terraformLeft = 0,
  452. realLosRadius = 54,
  453. realAirLosRadius = 40,
  454. losStatus = {0, 3855, 0 <repeats 15 times>},
  455. inBuildStance = false,
  456. stunned = false,
  457. useHighTrajectory = false,
  458. dontUseWeapons = false,
  459. deathScriptFinished = false,
  460. deathCountdown = 0,
  461. delayedWreckLevel = -1,
  462. restTime = 0,
  463. weapons = {
  464. <std::_Vector_base<CWeapon*,std::allocator<CWeapon*> >> = {
  465. _M_impl = {
  466. <std::allocator<CWeapon*>> = {
  467. <__gnu_cxx::new_allocator<CWeapon*>> = {<No data fields>}, <No data fields>},
  468. members of std::_Vector_base<CWeapon*,std::allocator<CWeapon*> >::_Vector_impl:
  469. _M_start = 0xf9da300,
  470. _M_finish = 0xf9da30c,
  471. _M_end_of_storage = 0xf9da310
  472. }
  473. }, <No data fields>},
  474. shieldWeapon = 0x0,
  475. stockpileWeapon = 0x0,
  476. reloadSpeed = 1,
  477. maxRange = 1000,
  478. haveTarget = false,
  479. haveUserTarget = false,
  480. haveDGunRequest = false,
  481. lastMuzzleFlameSize = 0,
  482. ---Type <return> to continue, or q <return> to quit---
  483. lastMuzzleFlameDir = {
  484. <SFloat3> = {
  485. x = 0,
  486. y = 1,
  487. z = 0
  488. },
  489. },
  490. armorType = 0,
  491. category = 30,
  492. quads = {
  493. <std::_Vector_base<int,std::allocator<int> >> = {
  494. _M_impl = {
  495. <std::allocator<int>> = {
  496. <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>},
  497. members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl:
  498. _M_start = 0x9231798,
  499. _M_finish = 0x92317a0,
  500. _M_end_of_storage = 0x92317a0
  501. }
  502. }, <No data fields>},
  503. los = 0xd31ed38,
  504. tempNum = 7504345,
  505. lastSlowUpdate = 0,
  506. mapSquare = 162856,
  507. controlRadius = 4,
  508. losRadius = 1,
  509. airLosRadius = 1,
  510. losHeight = 92.7819443,
  511. lastLosUpdate = 81799,
  512. radarRadius = 0,
  513. sonarRadius = 0,
  514. jammerRadius = 0,
  515. sonarJamRadius = 0,
  516. seismicRadius = 0,
  517. seismicSignature = 41.8330002,
  518. hasRadarCapacity = false,
  519. radarSquares = {
  520. <std::_Vector_base<int,std::allocator<int> >> = {
  521. _M_impl = {
  522. <std::allocator<int>> = {
  523. <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>},
  524. members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl:
  525. _M_start = 0x0,
  526. _M_finish = 0x0,
  527. _M_end_of_storage = 0x0
  528. }
  529. ---Type <return> to continue, or q <return> to quit---
  530. }, <No data fields>},
  531. oldRadarPos = {
  532. x = -1,
  533. y = 1043273744
  534. },
  535. stealth = false,
  536. sonarStealth = false,
  537. moveType = 0xffaad60,
  538. prevMoveType = 0x0,
  539. usingScriptMoveType = false,
  540. commandAI = 0xd9ddcc0,
  541. group = 0x0,
  542. condUseMetal = 0,
  543. condUseEnergy = 0,
  544. condMakeMetal = 0,
  545. condMakeEnergy = 0,
  546. uncondUseMetal = 0,
  547. uncondUseEnergy = 0,
  548. uncondMakeMetal = 0,
  549. uncondMakeEnergy = 0,
  550. metalUse = 0,
  551. energyUse = 0,
  552. metalMake = 0,
  553. energyMake = 0,
  554. metalUseI = 0,
  555. energyUseI = 0,
  556. metalMakeI = 0,
  557. energyMakeI = 0,
  558. metalUseold = 0,
  559. energyUseold = 0,
  560. metalMakeold = 0,
  561. energyMakeold = 0,
  562. energyTickMake = 1.10000002,
  563. metalExtract = 0,
  564. metalCost = 30950,
  565. energyCost = 142300,
  566. buildTime = 462150,
  567. metalStorage = 0,
  568. energyStorage = 0,
  569. lastAttacker = 0x0,
  570. lastAttack = -200,
  571. lastDamage = -100,
  572. lastFireWeapon = 0,
  573. recentDamage = 0,
  574. userTarget = 0x0,
  575. userAttackPos = {
  576. ---Type <return> to continue, or q <return> to quit---
  577. <SFloat3> = {
  578. x = 0,
  579. y = 0,
  580. z = 0
  581. },
  582. },
  583. userAttackGround = false,
  584. commandShotCount = -1,
  585. fireState = 2,
  586. dontFire = false,
  587. moveState = 1,
  588. activated = false,
  589. model = 0xe60e2d8,
  590. cob = 0x10547f38,
  591. script = 0x0,
  592. localmodel = 0xd5dc2b8,
  593. tooltip = {
  594. _M_dataplus = {
  595. <std::allocator<char>> = {
  596. <__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
  597. members of std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider:
  598. _M_p = 0xe7ef1dc "Krogoth - - Experimental Kbot"
  599. }
  600. },
  601. crashing = false,
  602. isDead = false,
  603. falling = false,
  604. fallSpeed = 0.200000003,
  605. inAir = false,
  606. inWater = false,
  607. flankingBonusMode = 1,
  608. flankingBonusDir = {
  609. <SFloat3> = {
  610. x = 0,
  611. y = 0,
  612. z = 1
  613. },
  614. },
  615. flankingBonusMobility = 10,
  616. flankingBonusMobilityAdd = 0.00999999978,
  617. flankingBonusAvgDamage = 1.39999998,
  618. flankingBonusDifDamage = 0.5,
  619. armoredState = true,
  620. armoredMultiple = 1,
  621. curArmorMultiple = 1,
  622. wreckName = {
  623. ---Type <return> to continue, or q <return> to quit---
  624. _M_dataplus = {
  625. <std::allocator<char>> = {
  626. <__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
  627. members of std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Alloc_hider:
  628. _M_p = 0xab24f3c "core_krogoth_dead"
  629. }
  630. },
  631. posErrorVector = {
  632. <SFloat3> = {
  633. x = -0.302853882,
  634. y = 0.0753254145,
  635. z = -0.642256141
  636. },
  637. },
  638. posErrorDelta = {
  639. <SFloat3> = {
  640. x = 0.00372611522,
  641. y = -8.71685479e-05,
  642. z = 0.00033092103
  643. },
  644. },
  645. nextPosErrorUpdate = 13,
  646. hasUWWeapons = false,
  647. wantCloak = false,
  648. scriptCloak = 0,
  649. cloakTimeout = 128,
  650. curCloakTimeout = 60154,
  651. isCloaked = false,
  652. decloakDistance = 0,
  653. lastTerrainType = 0,
  654. curTerrainType = 0,
  655. selfDCountdown = 0,
  656. directControl = 0x0,
  657. myTrack = 0x0,
  658. incomingMissiles = {
  659. <std::_List_base<CMissileProjectile*,std::allocator<CMissileProjectile*> >> = {
  660. _M_impl = {
  661. <std::allocator<std::_List_node<CMissileProjectile*> >> = {
  662. <__gnu_cxx::new_allocator<std::_List_node<CMissileProjectile*> >> = {<No data fields>}, <No data fields>},
  663. members of std::_List_base<CMissileProjectile*,std::allocator<CMissileProjectile*> >::_List_impl:
  664. _M_node = {
  665. _M_next = 0xfe5497c,
  666. _M_prev = 0xfe5497c
  667. }
  668. }
  669. }, <No data fields>},
  670. ---Type <return> to continue, or q <return> to quit---
  671. lastFlareDrop = 0,
  672. currentFuel = 0,
  673. luaDraw = false,
  674. noDraw = false,
  675. noSelect = false,
  676. noMinimap = false,
  677. isIcon = false,
  678. iconRadius = 0,
  679. maxSpeed = 1.20000005,
  680. weaponHitMod = 0.14453125,
  681. lodCount = 0,
  682. currentLOD = 0,
  683. lodLengths = {
  684. <std::_Vector_base<float,std::allocator<float> >> = {
  685. _M_impl = {
  686. <std::allocator<float>> = {
  687. <__gnu_cxx::new_allocator<float>> = {<No data fields>}, <No data fields>},
  688. members of std::_Vector_base<float,std::allocator<float> >::_Vector_impl:
  689. _M_start = 0x0,
  690. _M_finish = 0x0,
  691. _M_end_of_storage = 0x0
  692. }
  693. }, <No data fields>},
  694. luaMats = {{
  695. lodCount = 0,
  696. lastLOD = 0,
  697. lodMats = {
  698. <std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >> = {
  699. _M_impl = {
  700. <std::allocator<LuaUnitLODMaterial>> = {
  701. <__gnu_cxx::new_allocator<LuaUnitLODMaterial>> = {<No data fields>}, <No data fields>},
  702. members of std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >::_Vector_impl:
  703. _M_start = 0x0,
  704. _M_finish = 0x0,
  705. _M_end_of_storage = 0x0
  706. }
  707. }, <No data fields>}
  708. }, {
  709. lodCount = 0,
  710. lastLOD = 0,
  711. lodMats = {
  712. <std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >> = {
  713. _M_impl = {
  714. <std::allocator<LuaUnitLODMaterial>> = {
  715. <__gnu_cxx::new_allocator<LuaUnitLODMaterial>> = {<No data fields>}, <No data fields>},
  716. members of std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >::_Vector_impl:
  717. ---Type <return> to continue, or q <return> to quit---
  718. _M_start = 0x0,
  719. _M_finish = 0x0,
  720. _M_end_of_storage = 0x0
  721. }
  722. }, <No data fields>}
  723. }, {
  724. lodCount = 0,
  725. lastLOD = 0,
  726. lodMats = {
  727. <std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >> = {
  728. _M_impl = {
  729. <std::allocator<LuaUnitLODMaterial>> = {
  730. <__gnu_cxx::new_allocator<LuaUnitLODMaterial>> = {<No data fields>}, <No data fields>},
  731. members of std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >::_Vector_impl:
  732. _M_start = 0x0,
  733. _M_finish = 0x0,
  734. _M_end_of_storage = 0x0
  735. }
  736. }, <No data fields>}
  737. }, {
  738. lodCount = 0,
  739. lastLOD = 0,
  740. lodMats = {
  741. <std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >> = {
  742. _M_impl = {
  743. <std::allocator<LuaUnitLODMaterial>> = {
  744. <__gnu_cxx::new_allocator<LuaUnitLODMaterial>> = {<No data fields>}, <No data fields>},
  745. members of std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >::_Vector_impl:
  746. _M_start = 0x0,
  747. _M_finish = 0x0,
  748. _M_end_of_storage = 0x0
  749. }
  750. }, <No data fields>}
  751. }, {
  752. lodCount = 0,
  753. lastLOD = 0,
  754. lodMats = {
  755. <std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >> = {
  756. _M_impl = {
  757. <std::allocator<LuaUnitLODMaterial>> = {
  758. <__gnu_cxx::new_allocator<LuaUnitLODMaterial>> = {<No data fields>}, <No data fields>},
  759. members of std::_Vector_base<LuaUnitLODMaterial,std::allocator<LuaUnitLODMaterial> >::_Vector_impl:
  760. _M_start = 0x0,
  761. _M_finish = 0x0,
  762. _M_end_of_storage = 0x0
  763. }
  764. ---Type <return> to continue, or q <return> to quit---
  765. }, <No data fields>}
  766. }},
  767. alphaThreshold = 0.100000001,
  768. cegDamage = 1
  769. }
  770.  
  771.  
  772. I'd suspect listeners to be corrupted in this unit.
  773.  
  774. (gdb) p $130->listeners
  775. $138 = {
  776. <std::_List_base<CObject*,std::allocator<CObject*> >> = {
  777. _M_impl = {
  778. <std::allocator<std::_List_node<CObject*> >> = {
  779. <__gnu_cxx::new_allocator<std::_List_node<CObject*> >> = {<No data fields>}, <No data fields>},
  780. members of std::_List_base<CObject*,std::allocator<CObject*> >::_List_impl:
  781. _M_node = {
  782. _M_next = 0xf0dfbd0,
  783. _M_prev = 0xdec7360
  784. }
  785. }
  786. }, <No data fields>}
  787.  
  788.  
  789. How to check this?
  790.  
  791. (gdb) set $node = 0xfe545f4
  792. (gdb) p $node
  793. $191 = 266683892
  794. (gdb) p $node = *$node
  795. $192 = 252574672
  796. (gdb)
  797. $193 = 295722248
  798.  
  799. <hold enter to loop through linked list>
  800.  
  801. no repeat found at all, seems to through like entire memory...
  802.  
  803. ==========
  804.  
  805. in replay, at first moment of lag (just after 0:51:00)
  806.  
  807. maxParticles = 4000,
  808. currentParticles = 74783,
  809. particleSaturation = 15.0202503,
  810.  
  811. seemingly pretty much all CSimpleParticleSystems...
Advertisement
Add Comment
Please, Sign In to add comment