print_stack() raw implementation
This commit is contained in:
@@ -83,6 +83,25 @@ bool dwarf_value::get_generic(uint64_t& v)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __pst_context::print_stack(int max, uint64_t next_cfa)
|
||||||
|
{
|
||||||
|
log(SEVERITY_DEBUG, "CFA = %#lX, NEXT_CFA = %#lX, SP = %#lX", cfa, next_cfa, sp);
|
||||||
|
buff[0] = 0; offset = 0;
|
||||||
|
int i = 0;
|
||||||
|
if(cfa > sp) {
|
||||||
|
print("Args: ");
|
||||||
|
for(; i < max && (cfa - i) > sp; ++i) {
|
||||||
|
print("#%d 0x%lX ", i, *(uint64_t*)(cfa - i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((cfa - i) > next_cfa) {
|
||||||
|
print("Vars: ");
|
||||||
|
for(; i < max && (cfa - i) > next_cfa; ++i) {
|
||||||
|
print("#%d 0x%lX ", i, *(uint64_t*)(cfa - i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void __pst_context::print_registers(int from, int to)
|
void __pst_context::print_registers(int from, int to)
|
||||||
{
|
{
|
||||||
buff[0] = 0; offset = 0;
|
buff[0] = 0; offset = 0;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ typedef struct __pst_context {
|
|||||||
void log(SC_LogSeverity severity, const char*fmt, ...);
|
void log(SC_LogSeverity severity, const char*fmt, ...);
|
||||||
uint32_t print_expr_block(Dwarf_Op *exprs, int len, char* buff, uint32_t buff_size, Dwarf_Attribute* attr = 0);
|
uint32_t print_expr_block(Dwarf_Op *exprs, int len, char* buff, uint32_t buff_size, Dwarf_Attribute* attr = 0);
|
||||||
void print_registers(int from, int to);
|
void print_registers(int from, int to);
|
||||||
|
void print_stack(int max, uint64_t next_cfa);
|
||||||
|
|
||||||
ucontext_t* hcontext; // context of signal handler
|
ucontext_t* hcontext; // context of signal handler
|
||||||
unw_context_t context; // context of stack trace
|
unw_context_t context; // context of stack trace
|
||||||
|
|||||||
Reference in New Issue
Block a user