免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1375 | 回复: 0
打印 上一主题 下一主题

Linux gdb 查看stack外模块变量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-19 11:07 |只看该作者 |倒序浏览

BT的问题。遇到过几次。可能有简单的解决方法,可惜不知道。谁知道的,thanks very much to share: mail to liuake _at_ gmail.com
一个项目,有多个module,各module有各自的local global var。假设A module中有局部全局变量g_local。在B  module中也有局部全局变量g_local。现在,process core在了A module,怎么样查看B module中g_local的值?测试代码如下。
/*********************************
* filename :   fa.c
* ------------------------------
* function :
*  module A, g_local = 12 when core  ********************************/
#include
static int g_local; /* global varible, but local */
int fa2(void)
{
    int a;
    int *pn = NULL;
    a = 12;
    g_local = a;
    *pn = 0; /* core here */
    return a;
}
int fa1(void)
{
    int a;
    a = 11;
    fa2();
    g_local = a;
    return a;
}
int fa(void)
{
    int a;
    a = 10;
    fa1();
    g_local = a;
    return a;
}
/*********************************
* filename :   fb.c
* ------------------------------
* function :
*  module b, g_local = 10 finally  ********************************/
#include
static int g_local; /* local global */
int fb3(void)
{
    int b;
    b = 13;
    g_local = b;
    return b;
}
int fb2(void)
{
    int b;
    b = 12;
    fb3();
    g_local = b;
    return b;
}
int fb1(void)
{
    int b;
    b = 11;
    fb2();
    g_local = b;
    return b;
}
int fb(void)
{
    int b;
    b = 10;
    fb1();
    g_local = b;
    return b;
}
/*********************************
* filename :   elf.c
* ------------------------------
* function :
*  Just for testing
********************************/
#include
extern int fa(void);
extern int fb(void);
int main(void)
{
    fb();
    fa();
    return 0;
}
以下是调试过程:
$gcc -o elf fa.c fb.c elf.c
$ulimit -c 99999
$./elf
Segmentation fault (core dumped)
$gdb elf core.xxxxx
(gdb) bt
#0  0x08048313 in fa2 () at fa.c:18
#1  0x08048330 in fa1 () at fa.c:26
#2  0x0804834f in fa () at fa.c:35
#3  0x080483ee in main () at elf.c:17
(gdb) p g_local
$1 = 12 /* it is the value of module A, how to print g_local of fb.c??*/
无计可施。只有用BT的方法了。
$ readelf -a elf > map.txt /* dump elf address mapping information */
$ vi map.txt
83: 00000000     0 FILE    LOCAL  DEFAULT  ABS fa.c
84: 080495a8     4 OBJECT  LOCAL  DEFAULT   22 g_local
85: 00000000     0 FILE    LOCAL  DEFAULT  ABS fb.c
86: 080495ac     4 OBJECT  LOCAL  DEFAULT   22 g_local
找到了 fb.c 中 g_local的address,再回到gdb.
(gdb) p *(int *)0x080495ac
$1 = 10
这下对了。正是B中g_local的值。OK,搞定这个BT问题。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/28158/showart_217998.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP