归档之于 ‘ 2014 年十月

gcc的 “-fpack-struct” 编译选项导致程序core dump的分析

感谢网友【nanxiao】的投稿

最近team引入gcov来做代码分析。编译好的程序在Solaris上运行的好好的,结果在Linux上一运行就会产生core dump文件。这篇文章就介绍整个分析过程。

首先用gdb分析core文件,显示是strlen调用出了问题:

(gdb) 
#0  0x00000034e433386f in __strlen_sse42 () from /lib64/libc.so.6
#1  0x000000000053c57a in __gcov_init ()
#2  0x000000000053c4b9 in _GLOBAL__I_65535_0_g_cmd_param () at source/rerun/aicent_ara_rerun.c:963
#3  0x000000000053dc26 in __do_global_ctors_aux ()
#4  0x0000000000403743 in _init ()
#5  0x00007fff6d6b3ce8 in ?? ()
#6  0x000000000053db55 in __libc_csu_init ()
#7  0x00000034e421ecb0 in __libc_start_main () from /lib64/libc.so.6
#8  0x0000000000404449 in _start ()

由于我们使用的gcc是用安装包形式安装的,没有源码。所以就从github上找了相应版本的gcc源代码,希望能有所帮助。以下是__gcov_init函数的代码(https://github.com/gcc-mirror/gcc/blob/gcc-4_4_7-release/gcc/libgcov.c):

阅读全文

如何编写属于自己的Java / Scala的调试器

译者:赖辉强  原文地址

在本帖中,我们将探讨Java和Scala的调试器是如何编写和工作的;系统自带的调试器,例如:Windows中的WinDbg或者是Linux/Unix中的gdb,会获取操作系统直接提供给他们的链接入口来启动,从而指导和操作外部程序的状态。工作在操作系统顶部抽象层的Java虚拟机对字节码的调试有独立的处理架构。

这个调试的框架和APIs具有全开源、文档化、可扩展的特点,这意味着你可以轻松毫无顾忌的编写自己的调试器。该框架当前的设计由两大部分构成—JDWP协议和JVMTI API层。其中每个都有一系列使性能最佳的优点和使用案例。(你也可以阅读这篇文档:深入 JAVA 调试体系

阅读全文

并发网2014.9月阅读量Top10

ICON4金秋已过,转眼又到了月底,并发网9月Top10的阅读量的文章新鲜送到,希望各位看官能喜欢!有任何意见和建议,欢迎告诉我们,我们在努力!~祝大家国庆节快乐

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及……(2,047 人阅读)

阅读全文

return top