* Added nothrow to the new operator because otherwise the C++ compiler

will not accept if the allocator returns NULL and crashes instead
  (ie. not compiling in tracing would have crashed if some module tried
  to use it).
* Added total entries count to the KDL command output.
* Fixed computing the start index of the KDL command.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23460 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2008-01-12 23:55:53 +00:00
parent 884c36167c
commit 416458e9c4
2 changed files with 31 additions and 5 deletions

View File

@ -3,6 +3,7 @@
#include <SupportDefs.h>
#include <KernelExport.h>
#define ENABLE_TRACING 0
@ -29,7 +30,29 @@ class TraceEntry : trace_entry {
void Initialized();
void* operator new(size_t size);
void* operator new(size_t size, const std::nothrow_t&) throw();
};
class AbstractTraceEntry : public TraceEntry {
public:
AbstractTraceEntry()
:
fThread(find_thread(NULL)),
fTime(system_time())
{
}
virtual void Dump()
{
kprintf("[%6ld] %Ld: ", fThread, fTime);
}
thread_id Thread() const { return fThread; }
bigtime_t Time() const { return fTime; }
protected:
thread_id fThread;
bigtime_t fTime;
};
#endif // __cplusplus

View File

@ -101,7 +101,7 @@ TraceEntry::Initialized()
void*
TraceEntry::operator new(size_t size) throw()
TraceEntry::operator new(size_t size, const std::nothrow_t&) throw()
{
#if ENABLE_TRACING
if (sBuffer == NULL)
@ -143,17 +143,19 @@ int
dump_tracing(int argc, char** argv)
{
int32 count = 30;
if (argc == 2)
count = strtol(argv[1], NULL, 0);
int32 start = sEntries - count;
if (argc == 2) {
count = strtol(argv[1], NULL, 0);
} else if (argc == 3) {
if (argc == 3) {
start = strtol(argv[1], NULL, 0);
count = strtol(argv[2], NULL, 0);
} else if (argc > 3) {
kprintf("usage: %s [start] [count]\n", argv[0]);
return 0;
}
// TODO: add pattern matching mechanism for the class name
if (start < 0)
start = 0;
@ -173,6 +175,7 @@ dump_tracing(int argc, char** argv)
kprintf("** uninitialized entry **\n");
}
kprintf("%ld of %ld entries.\n", count, sEntries);
return 0;
}