| Line 462... |
Line 462... |
| 462 |
self.logger.info("Threads: %d, CPU load: %.1f%%, kernel load: %.1f%%, user load: %.1f%%\n\n"
|
462 |
self.logger.info("Threads: %d, CPU load: %.1f%%, kernel load: %.1f%%, user load: %.1f%%\n\n"
|
| 463 |
% (len(threads), cpuload * 100, coreload * 100, threadload * 100))
|
463 |
% (len(threads), cpuload * 100, coreload * 100, threadload * 100))
|
| 464 |
self.logger.info("Thread dump:\n")
|
464 |
self.logger.info("Thread dump:\n")
|
| 465 |
for thread in threads:
|
465 |
for thread in threads:
|
| 466 |
self.logger.info(thread.name+":\n", 2)
|
466 |
self.logger.info(thread.name+":\n", 2)
|
| 467 |
self.logger.info("Thread id: " + str(thread.id)+"\n", 4)
|
467 |
self.logger.info("Threadstruct address: " + self._hex(thread.addr)+"\n", 4)
|
| 468 |
self.logger.info("Thread type: " + thread.type+"\n", 4)
|
468 |
self.logger.info("Thread type: " + str(thread.thread_type)+"\n", 4)
|
| 469 |
self.logger.info("Thread state: " + thread.state+"\n", 4)
|
469 |
self.logger.info("Thread state: " + str(thread.state)+"\n", 4)
|
| 470 |
self.logger.info("Block type: " + thread.block_type+"\n", 4)
|
470 |
self.logger.info("Block type: " + str(thread.block_type)+"\n", 4)
|
| 471 |
self.logger.info("Blocked by: " + self._hex(thread.blocked_by_ptr)+"\n", 4)
|
471 |
self.logger.info("Blocked by: " + self._hex(thread.blocked_by)+"\n", 4)
|
| 472 |
self.logger.info("Priority: " + str(thread.priority)+"/255\n", 4)
|
472 |
self.logger.info("Priority: " + str(thread.priority)+"/255\n", 4)
|
| 473 |
self.logger.info("Current CPU load: %.1f%%\n" % ((thread.cpuload * 100) / 255.), 4)
|
473 |
self.logger.info("Current CPU load: %.1f%%\n" % ((thread.cpuload * 100) / 255.), 4)
|
| 474 |
self.logger.info("CPU time (total): "+str(datetime.timedelta(microseconds = thread.cputime_total))+"\n", 4)
|
474 |
self.logger.info("CPU time (total): "+str(datetime.timedelta(microseconds = thread.cputime_total))+"\n", 4)
|
| 475 |
self.logger.info("Stack address: " + self._hex(thread.stackaddr)+"\n", 4)
|
475 |
self.logger.info("Stack address: " + self._hex(thread.stack)+"\n", 4)
|
| 476 |
self.logger.info("Registers:\n", 4)
|
476 |
self.logger.info("Registers:\n", 4)
|
| 477 |
for registerrange in range(4):
|
477 |
for registerrange in range(4):
|
| 478 |
self.logger.info(" ")
|
478 |
self.logger.info(" ")
|
| 479 |
for register in range(registerrange, 16, 4):
|
479 |
for register in range(registerrange, 16, 4):
|
| 480 |
registerrepr = "r"+str(register)
|
480 |
registerrepr = "r"+str(register)
|
| 481 |
self.logger.info("{0:3s}: 0x{1:08X} ".format(registerrepr, thread.regs["r"+str(register)]))
|
481 |
self.logger.info("{0:3s}: 0x{1:08X} ".format(registerrepr, thread.regs[register]))
|
| 482 |
self.logger.info("\n")
|
482 |
self.logger.info("\n")
|
| 483 |
self.logger.info("cpsr: 0x{0:08X}".format(thread.regs.cpsr), 6)
|
483 |
self.logger.info("cpsr: 0x{0:08X}".format(thread.cpsr), 6)
|
| 484 |
self.logger.info("\n")
|
484 |
self.logger.info("\n")
|
| 485 |
|
485 |
|
| 486 |
@command
|
486 |
@command
|
| 487 |
def lockscheduler(self):
|
487 |
def lockscheduler(self):
|
| 488 |
"""
|
488 |
"""
|