GDB在调试rust(gnu with wasm)时,在错误的行号处设置了break



在调试我的大型rust项目时,我遇到了gdb将断点设置在错误行号的问题。当我在第406行键入设置断点的命令时,

break <absolute-path-of-my-file>/lib.rs:406

它返回在 432线上创建的断点

Breakpoint 2 at 0x5555570b9395: file <absolute-path-of-my-file>/lib.rs, line 432.

当我在406号线检查代码时,

list <absolute-path-of-my-file>/lib.rs:406

它返回

file: "<absolute-path-of-my-file>/lib.rs", line number: 406, symbol: "???"

我的问题是:

  1. 当我在第406行创建break时,为什么它在第432行设置break
  2. symbol: "???"list命令返回中是什么意思?谢谢你的帮助!
    PS:二进制文件的大小(未经优化构建后(为22GB,比我的内存(16GB(大

@Phúng Hưng Thịnh
当我编译C/C++程序时,我经常使用以下方法来调试我的程序
g++-g-墙源。C
g++-g-墙源。CPP
g++-g-Wall source.c
g++-g-Wall source.CPP
为了调试,我在编译过程中从不使用以下内容:
-O0
我还曾经使用:
来知道程序是否创建了任何核心转储
如果我们在任何平台windows/Linux/AIX/SunOS/HP-UX/OSF1/IRIX/UNIX上使用动态库(.dll/.so/.sl(,并为该外部库中的函数提供断点,则可能显示???输出
如果您为动态库内的函数提供中断,行号将提供您从外部库调用该外部函数的行号。我已经给出了使用C++程序的gdb的示例用法,相关的编译选项和任何操作系统的外部依赖关系。

我在Linux上尝试了以下命令;CYGWIN_NT";在使用gdb:
$gdb
(gdb(的窗口中!ls-d

(gdb(退出
因此,您可以为以下项提供输出吗!ls〃<我的文件的绝对路径>lib.rs">
GNU DEBUGGER(GDB(在Rust上的使用
确保有一个Rust GDB可执行文件
使用Rust GDB调试rustc可执行文件
我以前的所有评论都只是基于C和C++编程,而不是基于rust-gdb示例C代码:
#include<stdio.h>
void fun((

printf("fun"(;

int main/a.out
Exampe gdb
$gdb.exe-q/a.out
从中读取符号/a.out…
(gdb(突破乐趣
0x100401088处的断点1:文件sample.c,第4行。
;a.out";在sample.c:4
4 printf("fun\n"(处点击断点1,fun((
(gdb(列表
1#include<stdio.h>
2 void fun((
3{
4 printf("fun"(;
5}
6 int main((
7{
8 fun(;
9 return 0;
10}
(gdb(退出
调试会话处于活动状态
劣1[过程6108]将被杀死
是否退出?(y或n(y
打印代码的示例:
$gdb-q/a.out
从中读取符号/a.out…
(gdb(break-fun
断点1位于0x100401088:文件sample.c,第4行。
列表sample.c:4
1#include<stdio.h>
2 void fun((
3{
4 printf("fun"(;
5}
6 int main((
7{
8 fun(;
9 return 0;
10}
(gdb(退出

最新更新