随笔分类 - GCC/G++/GDB/core dump/调试
摘要:转自:https://www.cnblogs.com/shengulong/p/8053370.html gdb调试python的时候,需要根据不同的python版本2.6、2.7、3.x安装相应的gdb; 如何指定关联的python版本? 下面gdb源码,解压后,进入目录: ./configure
阅读全文
摘要:交叉编译环境的linaro-gdb可以用了,结果打开core文件,显示堆栈都是?? aarch64-linux-gun-gdb ./test core warning: /lib/libpthread.so.0': Shared library architecture unknown is not
阅读全文
摘要:1.交叉编译环境下的linaro-gdb无法用。 参考:https://stackoverflow.com/questions/25314983/ldd-says-not-found-even-though-library-is-in-my-ld-library-path 交叉编译环境里面gdb报错
阅读全文
摘要:参考:https://stackoverflow.com/questions/13403824/empty-core-dump-file-after-segmentation-fault 1.受限要开启coredump的大小限制。ulimit -c unlimited 2.core文件不能在挂在分区
阅读全文
摘要:只能在uv_close之后的uv_cb中对handle内存进行释放。 因为uv_close本身只是将handle代释放队列,倘若释放时遇到某些异步处理(如:uv_write)需要失败回调通知,将会继续调用对应的回调,此时再访问handle和可能因内存访问coredump。 void TcpHandl
阅读全文
摘要:gcc -dM -E - < /dev/null gcc -dM -E - < /dev/null
阅读全文
摘要:CPU 同内存交换数据的最小内存单位为4字节,即32位由CPU总线决定,所以小于4 字节的读取或者赋值操作无需加锁。即使不加锁也不会出现读取到的4字节中一半数据被改一半数据没有被改的情况。 但对 i++ 这类组合操作,仍可能需加锁. 因为i++是至少一次读取i一次写入i这两条命令,中间被打断就无法保
阅读全文
摘要:0.多重继承情况下,对象创建时会生成多个续表指针,用于转换成不同基类时的操作。 为了实现不同基类都能通过偏移找到对应虚表,这种对象在转换成不同基类型时也就进行指针的偏移。具体内存布局可以参考:多重继承和void*的糗事 1.在内存释放时delete可以对多重继承对象的不同类型指针进行释放。 那del
阅读全文
摘要:Jemalloc 不仅实现了一种通用的malloc, 还能利用它来做内存分析和监控/调优等. 这里介绍如何利用jemalloc来检测内存泄漏问题. 并且利用LD_PRELOAD环境变量, 可以做到不需要源代码, 将jemalloc库嵌入到可执行程序中, 从而用jemalloc去malloc内存, 并
阅读全文
摘要:转载自:https://blog.csdn.net/yanxiangyfg/article/details/80989680 讲的很清晰 一、gcov简介gcov是什么gcov是一个测试代码覆盖率的工具。与GCC一起使用来分析程序,以帮助创建更高效、更快的运行代码,并发现程序的未测试部分是一个命令行
阅读全文
摘要:warning: specialization of ‘template<class _Iterator> struct std::iterator_traits’ in different namespace [-fpermissive] While everything works correc
阅读全文
摘要:期初现象:malloc一块内存,读写操作时发生segmentation falt。一般来讲malloc倘若失败应该抛出异常,所以malloc返回一个指针后,这个指针应该都是可用的,况且是进行读操作。 所以遇到这个问题时感觉很奇怪。 继续现象:经过地址打印确认该地址是前面操作过的一个地址。说明地址不在
阅读全文
摘要:推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力是提高内存利用率。可以实现一个内存用于多个程序同时执行而不会发生地址冲突。引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在变成和使用上多方面的要求(方便编程、信息共享、信息保护、动态增长、动态链接)。段是内存
阅读全文
摘要:1.栈溢出引发的core往往出现出现在递归调用中。 gdb时看到的特征是: 栈缺失,当前栈地址不可读。 根据栈是逆向生长的特点(栈逆向生长,所以很容易出现类似数组溢出覆盖率函数返回地址,导致函数退出地址出错),可以通过地址增加找到栈的位置。 找到有效栈后往往会发现重复的地址不断重复,这个实际就是递归
阅读全文
摘要:SS, SP, BP 三个寄存器 SS:存放栈的段地址;SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式...
阅读全文
摘要:信号(Signals)信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。UNIX定义了许 多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变...
阅读全文
摘要:gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高代码如下:[root@74-82-173-217 shared]# cat add.cint add (int x, int y) {return x...
阅读全文
摘要:__builtin_prefetch() 是 gcc 的一个内置函数。它通过对数据手工预取的方法,减少了读取延迟,从而提高了性能,但该函数也需要 CPU 的支持。该函数的原型为:void __builtin_prefetch (const void *addr, ...)其中参数 addr 是个内存...
阅读全文
摘要:有时为定位一些如头文件循环包含致编译不过问题,我们要知道头文件包含顺序。G++ -H 除了进行正常编译,还会打印每个头文件的名称。每个文件通过缩进表示它在包括堆栈中的深度。无效的预编译头文件也会打印出来;无效的预编译头文件打印...x,有效的打印...!
阅读全文
摘要:一、头文件gcc 在编译时寻找所需要的头文件 :※搜寻会从-I开始※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH※再找内定目录/usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/g++-3/usr/lib/gcc-lib/i386-linux/2.95.2/i386-linux/include库文件但是如果装gcc的时候,是有给定的pr
阅读全文