草庐IT

MinGW-gdb

全部标签

linux - 为什么gdb显示的函数地址和nm的不一样?

今天在linux上调试代码时,突然发现gdb中的函数地址和nm显示的不一样。(可执行文件是静态链接的。)我认为它们显示的地址应该是相同的,因为它们都是逻辑地址。但今天的发现让我感到困惑。有人知道他们不同的原因吗?我写了下面这个简单的程序来说明我遇到的情况。voidfo(){return;}voidfoo(){fo();}intadd(inta,intb){foo();returna+b;}intmain(){inta=1;intb=2;add(a,b);return0;}nm的输出是:0000000000400584T_Z2fov0000000000400595T_Z3addii000

linux - 如何仅使用 ptrace (linux, x86/x86_64) 获取 "backtrace"(如 gdb)

我想像gdb一样得到类似backtrace的输出。但我想通过ptrace()直接执行此操作。我的平台是Linux,x86;以及后来的x86_64。现在我只想从堆栈中读取返回地址,而不转换为符号名称。所以,对于测试程序,通过gcc-4.5以-O0方式编译:intg(){kill(getpid(),SIGALRM);}intf(){inta;intb;a=g();b=a;returna+b;}inte(){intc;c=f();}main(){returne();}我将启动一个我的程序,并在一开始就连接ptrace来测试程序。然后,我将执行PTRACE_CONT并等待信号。测试程序何时会进

linux - 如何仅使用 ptrace (linux, x86/x86_64) 获取 "backtrace"(如 gdb)

我想像gdb一样得到类似backtrace的输出。但我想通过ptrace()直接执行此操作。我的平台是Linux,x86;以及后来的x86_64。现在我只想从堆栈中读取返回地址,而不转换为符号名称。所以,对于测试程序,通过gcc-4.5以-O0方式编译:intg(){kill(getpid(),SIGALRM);}intf(){inta;intb;a=g();b=a;returna+b;}inte(){intc;c=f();}main(){returne();}我将启动一个我的程序,并在一开始就连接ptrace来测试程序。然后,我将执行PTRACE_CONT并等待信号。测试程序何时会进

linux - gdb是否临时给页面写权限?

我正在调试Linux应用程序中的段错误,该错误是由试图更改静态常量数组结构的程序引起的(因此数据位于ELF的只读部分,随后加载到页面中授予只读权限)。在GDB中,我在执行错误存储的汇编程序行上放置了一个断点,当它停在那里时,我使用GDB手动执行了等效的写入操作。GDB毫无怨言地做到了这一点,读回的值证明它确实已经被写入。我查看了/proc/thepid/maps,那个特定的页面仍然被标记为“不可写”。所以我的问题是:GDB是否临时在只读页上设置写权限,执行写,然后重新设置权限?谢谢。 最佳答案 doesGDBtemporarilys

linux - gdb是否临时给页面写权限?

我正在调试Linux应用程序中的段错误,该错误是由试图更改静态常量数组结构的程序引起的(因此数据位于ELF的只读部分,随后加载到页面中授予只读权限)。在GDB中,我在执行错误存储的汇编程序行上放置了一个断点,当它停在那里时,我使用GDB手动执行了等效的写入操作。GDB毫无怨言地做到了这一点,读回的值证明它确实已经被写入。我查看了/proc/thepid/maps,那个特定的页面仍然被标记为“不可写”。所以我的问题是:GDB是否临时在只读页上设置写权限,执行写,然后重新设置权限?谢谢。 最佳答案 doesGDBtemporarilys

python - 在 gdb 中加载 python 支持

我遇到了在gdb中运行特定于python的命令的问题。我已经获得了一般的python支持:(gdb)pythonprint(True)True我已经安装了标准脚本:$ls/usr/share/gdb/python/gdb/commandFrameDecorator.pyFrameIterator.pyframes.pyfunction__init__.pyprinterprinting.pyprompt.py__pycache__types.pyunwinder.pyxmethod.py我确保所有路径都已启用加载:$cat~/.gdbinitadd-auto-load-safe-pat

python - 在 gdb 中加载 python 支持

我遇到了在gdb中运行特定于python的命令的问题。我已经获得了一般的python支持:(gdb)pythonprint(True)True我已经安装了标准脚本:$ls/usr/share/gdb/python/gdb/commandFrameDecorator.pyFrameIterator.pyframes.pyfunction__init__.pyprinterprinting.pyprompt.py__pycache__types.pyunwinder.pyxmethod.py我确保所有路径都已启用加载:$cat~/.gdbinitadd-auto-load-safe-pat

c - GDB 和核心转储问题

认识我的$uname-aLinuxhostmachine4.1.2-2-ARCH#1SMPPREEMPTWedJul1508:30:32UTC2015x86_64GNU/Linux我正在尝试学习如何使用GDB调试C程序。我认为,如果我可以使用GDB找出导致段错误的错误,那将特别出色。我有一个小程序,作为K&R练习1-13的解决方案而编写,给定一个特定大小的输入字符串,它将生成一个段错误:$~/learning_c/KR_exercises/chapter_1/1.13.x`--我提供了一个来自标准输入的字符串,并且...--Segmentationfault(coredumped)根据

c - GDB 和核心转储问题

认识我的$uname-aLinuxhostmachine4.1.2-2-ARCH#1SMPPREEMPTWedJul1508:30:32UTC2015x86_64GNU/Linux我正在尝试学习如何使用GDB调试C程序。我认为,如果我可以使用GDB找出导致段错误的错误,那将特别出色。我有一个小程序,作为K&R练习1-13的解决方案而编写,给定一个特定大小的输入字符串,它将生成一个段错误:$~/learning_c/KR_exercises/chapter_1/1.13.x`--我提供了一个来自标准输入的字符串,并且...--Segmentationfault(coredumped)根据

c++ - 使用 GDB 调试核心转储时知道谁是继承者

我的进程崩溃了,我有一个核心转储。我看到进程在运行类似于以下代码时崩溃了:classfather{public:voidvirtualrunVirtualFunc()=0;voidfunc(){runVirtualFunc();//...crashhere...THISISTHEPLACEINEEDTOKNOWWHOISTHEINHERITOR(soIcouldanalyzewhich"runVirtualFunc"ran).}virtual~father(){}};classson1:publicfather{public:voidvirtualrunVirtualFunc(){/*