我们通过在客户的机器上运行我们的软件来获取核心文件。 不幸的是,因为我们一直使用-O2 进行编译而没有debugging符号,这导致了我们无法弄清楚为什么会崩溃的情况,我们修改了构build,现在他们生成了-g和-O2。 然后,我们build议客户运行-g二进制文件,以便更易于debugging。 我有几个问题: 从Linux发行版(而不是在Dev中运行的发行版)生成核心文件时会发生什么情况? 堆栈跟踪是否有意义? 有什么好的书籍可以在Linux或Solaris上进行debugging吗? 面向对象的例子会很棒。 我正在寻找真实的例子,找出为什么一个例程崩溃,作者如何解决问题。 从中级到高级的东西会更好,因为我已经这样做了一段时间了。 一些组装也会很好。 这是一个崩溃的例子,要求我们告诉客户得到一个-g版本。 的二进制文件: Program terminated with signal 11, Segmentation fault. #0 0xffffe410 in __kernel_vsyscall () (gdb) where #0 0xffffe410 in __kernel_vsyscall () #1 0x00454ff1 in select () from /lib/libc.so.6 … <omitted frames> 理想情况下,我想解决为什么确切的应用程序崩溃 – 我怀疑这是内存腐败,但我不是100%确定。 远程debugging是严格禁止的。 谢谢
我的程序像这样操作: exe -p param1 -i param2 -o param3 它崩溃并生成一个核心转储文件core.pid 我想通过分析核心转储文件 gdb ./exe -p param1 -i param2 -o param3 core.pid 但gdb认识到exe的参数作为gdb的input。 如何在这种情况下分析核心转储文件?
我正在通过gdb运行一个应用程序,我想设置一个断点,任何时候访问/更改一个特定的variables。 有这样做的好方法吗? 我也会对用C / C ++来监视variables的其他方式感兴趣,看看它是否/何时发生变化。
在Unix上,有没有什么办法可以让一个进程改变别人的环境variables(假设他们都是由同一个用户运行的)? 一般的解决办法是最好的,但如果不是,那么一个是另一个的孩子的具体情况呢? 编辑:如何通过GDB?