FunctionProfiler.h [plain text]
#ifndef __FunctionProfiler_h__
#define __FunctionProfiler_h__
#include <map>
#include <vector>
#include <string>
#include "DNBDefs.h"
#include "DNBRuntimeAction.h"
#include "PThreadMutex.h"
class DNBBreakpoint;
class MachProcess;
class FunctionProfiler : public DNBRuntimeAction
{
public:
FunctionProfiler (nub_addr_t start_addr, nub_addr_t stop_addr);
virtual ~FunctionProfiler ();
virtual void Initialize(nub_process_t pid);
virtual void ProcessStateChanged(nub_state_t state);
virtual void SharedLibraryStateChanged(DNBExecutableImageInfo *image_infos, nub_size_t num_image_infos) {}
nub_bool_t BreakpointHit(nub_process_t pid, nub_thread_t tid, nub_break_t breakID);
bool ShouldStepProcess() const
{
return m_func_entered_count > 0;
}
protected:
static nub_bool_t BreakpointHitCallback (nub_process_t pid, nub_thread_t tid, nub_break_t breakID, void *baton);
void Clear();
void SetBreakpoints();
nub_process_t m_pid;
nub_addr_t m_start_addr;
nub_addr_t m_stop_addr;
nub_break_t m_start_break_id;
nub_break_t m_stop_break_id;
uint32_t m_func_entered_count;
nub_addr_t m_last_pc;
uint32_t m_last_flags;
uint32_t m_consecutive_opcode_count;
uint32_t m_total_opcode_count;
};
#endif // __FunctionProfiler_h__