Tag: 调试

Valgrind是否存在已知的误报问题?

Valgrind是否有任何已知的误报? 我通过fmemopen函数得到’条件跳转或移动取决于未初始化的值’,用C语言编写并用GCC编译。 我能确定这是真的吗? 编辑:抑制文件中是否存在已知问题? 在程序中是否可以做一些事情,这不是真正的错误,但Valgrind会说它们是? 如果存在已知问题,列表会很好。

GDB:尝试取消引用通用指针

如何使GDB在x/s等打印function中进行额外的解引用? 当我在x/ I中尝试显式解引用时,会出现错误“尝试取消引用通用指针”。 使用x/多次工作,因为每次使用都包含隐式解引用,但这很烦人,因为我必须复制并粘贴每个中间结果。 例 考虑非常有用的C程序, example.c : #include int main(int argc, char **argv) { printf(“argv[0] = %s\n”, argv[0]); } 如果我构建它并将其加载到GDB中,我看到argv存储在0xc(%ebp) ,因为它的双重因素作为第二个参数传递给第24行的printf (即0x4(%esp) ): $ gcc -o example example.c $ gdb example (gdb) disass main Dump of assembler code for function main: 0x080483e4 : push %ebp 0x080483e5 : mov %esp,%ebp 0x080483e7 : and $0xfffffff0,%esp 0x080483ea […]

多维数组和传输缓冲区

我试图将缓冲区保存为1800个字符的数组段。 当我尝试打印每个新缓冲区时,我能够传输缓冲区。 我输出为null。 我究竟做错了什么? 编辑 – 我将循环更改为此以将空终止添加到第二维的末尾。 现在输出告诉我它是null。 但printf(“%c”)表示数据已被转移。 while(buf_pos < msg_size+1){ if(buf_pos % 1800 == 0){ msg_buff[key_num][cbuf_pos]='\0'; key_num++; cbuf_pos=0; msg_buff[key_num][cbuf_pos]=buf[buf_pos]; }else msg_buff[key_num][cbuf_pos]=buf[buf_pos]; printf("%c",msg_buff[key_num][cbuf_pos]); cbuf_pos++; buf_pos++; }

奇怪的seg故障,可能与realloc

char *dumpTB (TB tb){ char* text = malloc(sizeof(char)); int i = 0; // int x = 0; //string index tNode* curr = tb->head; while(curr != NULL){ while(curr->line[x] != ‘\n’){ printf(“%d”, i); text[i] = curr->line[x]; printf(“%c\n”, text[i]); text = realloc(text, i+1); i++; x++; } text[i] = ‘\n’; printf(“%c”, text[i]); text = realloc(text, i+1); i++; x = […]

在尝试将GDB附加到进程时如何解决“ptrace操作不允许”?

我正在尝试使用gdb附加程序,但它返回给我: 附加到进程29139无法附加到进程。 如果您的uid与目标进程的uid匹配,请检查/ proc / sys / kernel / yama / ptrace_scope的设置,或以root用户身份再次尝试。 有关更多详细信息,请参阅/etc/sysctl.d/10-ptrace.conf ptrace:不允许操作。 edb-debugger返回“无法附加到进程,请检查权限,然后重试。” strace返回“attach:ptrace(PTRACE_ATTACH,…):不允许操作” 我将“kernel.yama.ptrace_scope”1更改为0并将“/ proc / sys / kernel / yama / ptrace_scope”1更改为0并尝试使用以下方法设置“set environment LD_PRELOAD =。/ ptrace.so”: #include int ptrace(int i, int j, int k, int l) { printf(” ptrace(%i, %i, %i, %i), returning -1\n”, i, j, k, l); return 0; } […]

使用gdb进行gfortran调试:w_powf.c:没有这样的文件或目录

我有一个Fortran程序,我正在调试。 我有一个可变数据列表,其中一个预期变量几乎是其预期值的两倍。 所以我用调试标志编译了程序,并开始调试:程序名称是hfock $gdb hfock (gdb) break hfock (gdb) run Starting program: /home/e/Desktop/hfock hfock Breakpoint 1, hfock () at hfock.f:16 16 ZETA1 = 2.173171 (gdb) s 17 ZETA2 = 1.188530 (gdb) s 18 WRITE (*, ‘( “Zeta1:”, F7.4 / “Zeta2:”, F7.4 )’ ) ZETA1, ZETA2 (gdb) s Zeta1: 2.1732 Zeta2: 1.1885 21 PLUS=ZETA1+ZETA2 (gdb) s […]

C8051f312微控制器

我不是很擅长C语言,但我已经为C8051F312微控制器编写了一个非常简单的代码。 我的代码不起作用。 请帮帮我,我错了什么。 #include C8051F310.h #include stdio.h sbit LED_16 = P1^7; // green LED: 1 = ON; 0 = OFF void init(void) { // XBRN registers_init XBR0 = 0x00; XBR1 = 0x00; // Enable the crossbar PCA0MD = 0X00; // port_init P0MDOUT = 0x00; // Output configuration for P0 P1MDOUT = 0x40; // Output configuration […]

在Mac上使用gdb在eclipse中调试 – 无法执行MI命令:-exec-run

我有我的Eclipse Kepler和我简单的HelloWorld C程序,我想学习如何调试C程序。 单击调试按钮时,我收到以下错误消息: 最终启动顺序错误无法执行MI命令:-exec-run来自调试器后端的错误消息:无法找到进程ID为359的Mach任务端口:(os / kern)失败(0x5)。 无法找到进程ID为359的Mach任务端口:(os / kern)失败(0x5)。 我搜索了一整天,没有找到任何解决方案。 我已经在Eclipse GDB MacOSX Mavericks这篇文章中做了所有推荐的事情,但仍然会出现此错误。 如果有人可以帮助我在Eclipse中设置调试器,那真的很棒。 哦,我通过macports下载并安装了gdb-apple,我不得不使用“-f”选项和codesign命令,因为它没有用。 也许这些是重要信息。

sYSMALLOc:断言失败 – 任何想法如何有效调试?

我的服务器守护程序在大多数计算机上工作正常但是我得到的一个: malloc.c:3074: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) – 1) * 2])) – __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) – 1)) & ~((2 * (sizeof(size_t))) – 1)))&& ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)’ failed. gdb回溯: […]

为什么编译器抱怨这个宏声明

为了调试方便,我编写了下面的宏, 1 #ifndef DEF_H 2 #define DEF_H 3 #define DEBUG_MODE 4 #define DEBUG_INFO(message) \ 5 #ifdef DEBUG_MODE \ 6 cout << message << endl; \ 7 #endif \ 8 #endif 但gcc抱怨如下 def.h:4: error: ‘#’ is not followed by a macro parameter def.h:1: error: unterminated #ifndef 这段代码出了什么问题? 我在这里错过了一些重点吗?