gpt4 book ai didi

c - 如何使用GDB调试多线程程序?

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:52 27 4
gpt4 key购买 nike

我正在编写一个 2 线程程序,其中一个写入线程和一个读取线程可以同时访问磁盘上的文件。写入线程可以 (1) 从磁盘读取并创建一个新文件,并且 (2) 删除旧文件,并将新文件 (tmp) 重命名为旧文件名。新文件总是比旧文件大。读取线程在情况 (1) 期间从文件中读取。

但是,当新文件小于旧文件时,读取中的 fscanf 会产生 No such file or directory 段错误。我确定了写入线程正在调用的函数,但我想知道写入线程正在执行的语句以及局部变量值。函数很大,所以每条语句都 printf 是不切实际的。我如何使用 GDB 找到它?

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb73ffb40 (LWP 12649)]
__isoc99_fscanf (stream=0x0, format=0x804b5f1 "%d%d%d\n") at isoc99_fscanf.c:30
30 isoc99_fscanf.c: No such file or directory.
(gdb) bt
#0 __isoc99_fscanf (stream=0x0, format=0x804b5f1 "%d%d%d\n") at isoc99_fscanf.c:30
#1 0x0804ae18 in binary_search_in_disk (k_level=1, key=2) at lib.c:887
#2 0x0804abbc in search (k_level=1, key=2) at lib.c:802
#3 0x080490da in get (key=2) at lsm.c:56
#4 0x08048dc9 in run_get (args=0x804e0c8) at concurrent_main.c:181
#5 0xb7f71f70 in start_thread (arg=0xb73ffb40) at pthread_create.c:312
#6 0xb7ea7bee in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

最佳答案

I wish to know which statement that write thread is executing at the moment, and the local variable values

鉴于您的堆栈跟踪,当前语句是 lib.c 的第 887 行中的任何内容。

以下命令序列将让您查看局部变量的值:

(gdb) frame 1
(gdb) info locals

关于c - 如何使用GDB调试多线程程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com