小编Tha*_*raj的帖子

在GDB中遇到某个断点时如何执行特定操作?

我正在寻找一种方法,当一个特定的断点在gdb中命中时做一些动作.

基本上我的程序中有一些memleak.当malloc和free函数命中时,我需要进入函数(步骤)并收集一些基本信息,如addr和size(基本上打印那些值).完成后恢复我的程序.

我们有什么好办法吗?

c gdb

53
推荐指数
3
解决办法
2万
查看次数

什么是__i686.get_pc_thunk.bx?为什么我们需要这个电话?

当我拆卸我的小功能时,我碰巧看到了这个电话

call   0xf60d2f47 <__i686.get_pc_thunk.bx>.
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我需要在我的程序中调用此函数.任何解释都会有所帮助.

c assembly glibc shared-libraries

35
推荐指数
2
解决办法
2万
查看次数

如何将函数地址映射到*.so文件中

backtrace函数给出一组回溯如何用函数名/文件名/行号映射它?

for ex:-
backtrace() returned 8 addresses
./libtst.so(myfunc5+0x2b) [0xb7767767]
./libtst.so(fun4+0x4a) [0xb7767831]
./libtst.so(fun3+0x48) [0xb776787f]
./libtst.so(fun2+0x35) [0xb77678ba]
./libtst.so(fun1+0x35) [0xb77678f5]
./a.out() [0x80485b9]
/lib/libc.so.6(__libc_start_main+0xe5) [0xb75e9be5]
./a.out() [0x80484f1]
Run Code Online (Sandbox Code Playgroud)

从上面的堆栈我怎样才能获得文件名和行号?我做了以下事情,但没有运气.如果我错了,请纠正我:)

for ex:-
./libtst.so(fun2+0x35) [0xb77dc887]

0xb77dc887(fun2 addr+offset)-0xb77b6000 (lib starting addr) = 0x26887 (result)
result is no way related to function in nm output.

I used addr2line command:-
addr2line -f -e libtst.so 0xb77dc887
??
??:0
Run Code Online (Sandbox Code Playgroud)

那么,我如何在运行时或运行后解析?提前致谢...

nm:-
00000574 T _init
00000680 t __do_global_dtors_aux
00000700 t frame_dummy
00000737 t __i686.get_pc_thunk.bx
0000073c T myfunc5
000007e7 T fun4
00000837 T fun3 …
Run Code Online (Sandbox Code Playgroud)

c debugging shared-libraries stack-trace

34
推荐指数
4
解决办法
3万
查看次数

为什么我们不能使用双指针来表示二维数组?

为什么我们不能使用双指针来表示二维数组?

arr[2][5] = {"hello","hai"};
**ptr = arr;
Run Code Online (Sandbox Code Playgroud)

这里为什么双指针(**ptr)在这个示例中不起作用?

c

20
推荐指数
3
解决办法
1万
查看次数

如何在日志文件中引入日期和时间

我有一个用C编写的守护进程.我将事件记录在日志文件中,但现在我想在将事件写入日志文件时添加日期和时间.我怎样才能做到这一点?

当前日志文件: -

Event one occurred: result:
Event two occurred: result:
Run Code Online (Sandbox Code Playgroud)

我希望日志文件看起来像: -

Sep 14 11:35:55 Event one occurred: result:
Sep 14 11:35:55 Event two occurred: result:
Run Code Online (Sandbox Code Playgroud)

我的环境是C和Linux.

c linux logging datetime

9
推荐指数
3
解决办法
2万
查看次数

应用程序崩溃,但没有生成核心转储

我有一个问题,我的应用程序在几天/几周后继续倾销核心,但不幸的是,没有产生核心转储.

我们试图设置ulimit -c unlimited没有成功,所以我们setrlimit在代码本身中包含了功能,但也没有运气.最重要的是,我们也添加了MALLOC_CHECK_.

有趣的是,当我们尝试启动手动核心转储(使用kill -ABRT <pid>)时,它确实生成了核心转储.

我可以看到以下消息 /var/log/message

内核:[2302077.396021] myapp [22140]:segfault at 54552e42 ip 00000000f773f36f sp 00000000fffdc48c error 4 in ld-2.11.3.so [f7727000 + 1f000]

环境:sles11

有关如何使应用程序更可靠地生成核心转储的任何建议?

c linux gdb suse opensuse

6
推荐指数
1
解决办法
1万
查看次数

java中extern的等效关键字是什么?

我在一个文件中有一个公共静态变量,如何将相同的变量导出到其他文件?

例如: -

file1.java

public final static int buf = 256;
Run Code Online (Sandbox Code Playgroud)

file2.java

如何在此文件中访问变量"buf"?

java

5
推荐指数
1
解决办法
1万
查看次数

如何在Linux中调试多线程挂起进程?

多线程应用程序挂起,它没有响应任何命令.我试过没有运气的事情:

  1. 将进程附加到gdb(错误:(gdb)attach 6026附加到进程6026 ptrace:不允许操作.)
  2. gstack(gstack只是像那样挂起)

有没有什么好方法可以调试这个过程?

c linux multithreading linux-kernel

5
推荐指数
1
解决办法
3798
查看次数

如何查找谁将sigterm信号发送到我的进程或我的进程组?

我们有一个守护程序服务器程序,它会分配一个孩子.当孩子退出时,父母正在接收SIGTERM信号.所以,我们想知道

1)谁发送了这个SIGTERM

2)是否SIGTERM只针对父母或其团体?

3)SIGTERM在这种情况下可以生成哪些可能的方法?

4)是否可以屏蔽此SIGTERM信号?如果是,这次电话的副作用是什么?

c unix linux

3
推荐指数
2
解决办法
6143
查看次数

如何找到fprintf()的实际错误?

在我的程序中fprintf()返回-1,表示错误.我怎样才能找出实际的错误?

c c++ file-io file

3
推荐指数
1
解决办法
3093
查看次数