Tag: 回溯

在不使用ebp的情况下实现堆栈回溯

当明确告诉编译器不使用ebp作为堆栈帧指针时,如何实现堆栈回溯?

是否有用于确定帧指针未被消除的gcc宏?

当使用-fomit-frame-pointer(对于各种-O设置自动)时,执行回溯是有问题的。 我想知道是否有一种方法可以在编译时确定代码是用这个开关编译的? 在那种情况下,我可以放入一个#ifndef来防止在不明智的情况下进行反向追踪。 当此-fomit-frame-pointer开关打开时是否设置了任何宏? 谢谢, 那么setjmp

回溯算法在寻找gradle生最低学期数中的应用

我正在从包含的文件中获取输入 每学期没有课程和最多允许课程 所有课程名称(最多5个字母数字) couse name,提供的sem,先决条件,Prereq课程。 -1和-1结尾输出将是完成所有课程的最小学期数。 这是我的代码,所以你知道我已经完成了工作。 我的代码正在编译和执行,但没有显示完成课程的sems数。 请告诉我我在哪里做错了 #include #include #include #include #include char garbage[12][6]; char courseIdentifier[12][6],prereqIdentifier[12][5][6]; char semOffered[12]; bool done[12]; bool allDone(int); bool donePrereq(int,int); int main(void) { FILE *fp; fp = fopen(“graduate.in”,”r”); int n,m,p; int i,j,k; for(i=0;i<12;i++) { strcpy(courseIdentifier[i],""); } for(i=0;i<12;i++) { for(j=0;j<5;j++) { strcpy(prereqIdentifier[i][j],""); } } fscanf(fp,"%d %d",&n,&m);// take n,m while(n != […]

如何在内核模块代码中包含C backtrace?

所以我试图找出哪些内核进程正在调用块驱动程序中的某些函数。 我认为在C库中包含backtrace()会让它变得简单。 但我无法加载回溯。 我复制了这个示例函数来显示回溯: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/063/6391/6391l1.html 所有编译尝试都在一个或另一个地方发生错误,导致无法找到文件或未定义函数。 这是最接近的。 在Makefile中我放了编译器指令: -rdynamic -I/usr/include 如果我省略第二个,-I / usr / include,那么编译器报告它找不到所需的头文件execinfo.h。 接下来,在我想要做回溯的代码中,我从示例中复制了该函数: //trying to include the c backtrace capability #include void show_stackframe() { void *trace[16]; char **messages = (char **)NULL; int i, trace_size = 0; trace_size = backtrace(trace, 16); messages = backtrace_symbols(trace, trace_size); printk(KERN_ERR “[bt] Execution path:\n”); for (i=0; i<trace_size; ++i) […]