谁可以指导如何使用GDB调试器在Linux上调试JNI代码(如果可能,请建议其他选项)。
-My JNI project when running on Linux is leading to a JVM crash.
-The CPP code has been compiled into .so files.
-I run the project like this : *java xyz.jar -commandline_args_to_project*.
我已经安装了Gdb,但我不知道如何使用它来调试项目。另外,我是否有必要使用-g选项t调试.so文件来编译.
我们可以用非常简单的例子来重现这个问题,方法是在我们的源代码中有不止一个中止调用。在下面的示例代码中,我们共有四个不同条件下的中止调用,但是当我们使用优化标志(-O3)编译时,我们只能看到一个中止调用的调试信息。因此,在这四个中止调用中发生崩溃的地方,gdb总是给出一个具有调试信息的调用。
#include <stdio.h>
#include <stdlib.h>
void level_aa(int a)
{
if (a == 0)
abort();
if (a == 1)
abort()
在下面的示例代码中,我们总共有四个不同条件下的中止调用,但当我们使用优化标志(-O3)进行编译时,我们只能看到一个中止调用的调试信息。因此,在这四个中止调用中,无论何时发生崩溃,gdb都会给出有调试信息的那个。
#include <stdio.h>
#include <stdlib.h>
void level_aa(int a)
{
if (a == 0)
abort();
if (a == 1)
abort();
if (a == 2)
abort()
我已经为ARM平台交叉编译了/bin/ls NetBSD实用程序。在执行相同的命令时,我发现应用程序崩溃了。尝试使用gdb解码相同的代码。我看到以下错误。
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-23.el5_5.2)版权所有(C) 2009 Free Software Foundation,Inc. License GPLv3+:GNU GPL version 3或更高版本这是自由软件:您可以自由更改和重新分发它。在法律允许的范围内,没有任何担保。键入"show Type“和"show warranty”查看详细信息。这个G
我花了一整天的时间研究这个bug,我的同事说它看起来像链接器或库错误。我以前从来没有过这样的经历,所以我来这里记录它并寻求帮助!
调用main之前的可执行段错误
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x00007ffff7b47901 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2 0x00007ffff7b47
我有一个Python程序,它有时会因为“双重免费或损坏”错误而崩溃。我正在试图找出这种情况发生在哪里(可能是在我使用的众多库中的一个),这样我就可以防止它崩溃。为此,我启用了核心转储,现在可以使用Apport .crash文件了。
我被困在这里了。如何将核心转储加载到gdb或其他可以让我查看任何可用堆栈跟踪信息的东西?
apport似乎很棒,但不会加载,因为.crash文件中没有包:
ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutableP
我试图学习如何在核心转储上使用gdb。
以下是代码:
int main()
{
return 1/0;
}
这是gdb输出,当我运行gdb a.out core时
warning: exec file is newer than core file.
[New LWP 3121]
Core was generated by `./crash'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x00000000004004fc in ?? ()
(gdb) bt
#0 0x0000000000
我正在尝试使用lli来解释/即时编译一个使用共享对象afl-llvm-rt.so中定义的函数的位码文件a.bc。当我尝试像这样使用lli时 lli -dlopen ./afl-llvm-rt.so a.bc 我得到了: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0. Program arguments: lli -load ./afl-llvm-rt.o a.bc
#0 0x00007fa2a620f833 llvm::sys::Pri
我有一段C代码,如下所示,它在下面的calloc()调用中崩溃:
... some code
free (ipl->fldptr);
ipl->fldptr = calloc (flds*4, sizeof(struct fldptr_type));
...some more code
我尝试gdb它,我得到了下面的回溯在crash:
Program received signal SIGSEGV, Segmentation fault.
0x0000003ade478f94 in _int_malloc () from /lib/libc.so.6
Missing separat
I am trying to test linux kernel stack size in 64 bit.
我发现这种奇怪的行为。我编写了以下代码来崩溃内核,但奇怪的是,只有当printk没有注释时,它才会崩溃,否则运行良好,没有错误/警告!
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int __init crash_stack_init(void)
{
long arr[1
在我的linux机器上,计算一个比FLT_MAX大的浮子会导致无穷大,如下所示:
sacha@sacha-XPS13:~$ gdb
GNU gdb (GDB) 7.6.1-ubuntu
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There
当按照通常的方式运行时,gdb会像预期的那样停止:
(gdb) break main
(gdb) run
Starting program ...
Breakpoint 1, main ...
在管道运行时,gdb从不停止:
(gdb) run | cat
Starting program: /home/sds/z | cat
...
During startup program exited normally.
(gdb)
如何调试管道时的程序行为?
我的设置:
$ gdb --version
GNU gdb (GDB) Amazon Linux (7.6.1-64.33.amzn1)
$
我用以下方法为arm编译了gdbserver 7.6:
cd /gdb-7.6-src/gdb/gdbserver
./configure --target=arm-linux --host=arm-linux
make CC=/path/to/cross-compiler-gcc
然后,我为arm编译了gdb 7.6,并使用:
cd /gdb-7.6-src/
./configure --target=arm-linux --prefix=/opt/gdb-arm/install/
make && make install
我用以下方法编译了我的琐碎应用程序:
/path/t
我安装了libc6 & libc6-dbg。
(gdb) b
reak freeifaddrs
(gdb) run
Breakpoint 1, __freeifaddrs (ifa=0xa822e0) at ../sysdeps/unix/sysv/linux/ifaddrs.c:840
840 ../sysdeps/unix/sysv/linux/ifaddrs.c: No such file or directory.
(gdb) list
835 in ../sysdeps/unix/sysv/linux/ifaddrs.c
(gdb) disassemble
Dump of a
我可以与gdb一起前进,但是每次我想知道我在源代码中的位置时,我都必须给出"list“命令。
(gdb) next
351 int right = get_variable(right_token, right_id);
(gdb) list
346 op = "<>";
347 right_id = parse_id_or_crash();
348 }
349 Token * right_token = tokens[parser_index - 1];
350 int left = get_
我正在尝试调试一个在处理请求时派生的进程。
我已经将follow-fork-mode设置为child,允许gdb在命中子对象中的断点时闯入。但是,当我继续从子进程中继续时,父进程就分离了。
很多文档都指向选项detach-on-fork,但是如果我尝试设置这个选项,我会得到:
(gdb) set detach-on-fork on
No symbol "detach" in current context.
该选项的链接清晰可见:
编辑:系统信息
>uname -a
Linux localhost 2.6.9-78.0.22.ELsmp #1 SMP Thu Apr 3
我正在尝试远程调试Linux的内核。我已经创建了一个VM (使用VMware),并使用gdb从我的PC连接到它,一切正常。
问题是gdb无法加载vmlinux-gdb.py脚本。我尝试在gdb上使用source命令添加它,但得到以下错误:
Traceback (most recent call last):
File "~/workspace/kernels/default-kernel/scripts/gdb/vmlinux-gdb.py", line 28, in <module>
ImportError: No module named 'linu