如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 ( 4 )

 
上接:如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 ( 3)
 
这篇谈谈抓屏(screenshot)的做法:
所谓抓屏:就是把出现问题时界面的情况抓下来,可以抓模拟器,LCD或者terminal的屏幕;抓屏比较适合于产品使用期,这时候开发人员看不当时的情况,如果出现问题,把屏幕抓下来,对于事后分析问题很有帮助
       下面的抓屏函数,你可以它拷贝到你的模块中编译,然后调用即可;如果想在一个项目中统一使用,就把它编译成一个可执行文件,放到你们程序能找到的地方,比如/usr/bin等处,项目中的各个模块都可以使用了;
 
1 抓屏函数
 
#include <gtk/gtkmain.h>
 
//抓屏函数
static gboolean
screenshot (const char *filename, GError **error)
{
 GdkDrawable *root_window;
 int          width, height;
 GdkPixbuf   *pixbuf;
 gboolean     ret;
 
 root_window = gdk_get_default_root_window ();
 gdk_drawable_get_size (root_window, &width, &height);
 
 pixbuf = gdk_pixbuf_get_from_drawable (NULL,
                                                                             root_window,
                                                                             gdk_drawable_get_colormap (root_window),
                                                                             0, 0,
                                                                             0, 0,
                                                                             width, height);
 
 ret = gdk_pixbuf_save (pixbuf, filename, "png", error, NULL);
 g_object_unref (pixbuf);
 
 return ret;
}
 
//把抓屏函数编译成抓屏工具:可执行文件,
int
main (int argc, char **argv)
{
 const char *filename;
 GError     *error = NULL;
 
 gtk_init (&argc, &argv);
 
 if (argc != 2)
    {
      g_printerr ("Usage: %s filename.png/n", g_get_prgname ());
      return 1;
    }
 filename = argv[1];
 
 if (screenshot (filename, &error))
    return 0;
 
 g_printerr ("%s: %s/n", g_get_prgname (), error->message);
 g_error_free (error);
 return 1;
}
 
2 makefile
//根据项目的不同配置,你可以修改这个prefix
prefix = /usr
bindir = $(prefix)/bin
 
CC ?= gcc
CFLAGS ?= -Wall -O2 -g
CFLAGS += $(GTK_CFLAGS)
LDLIBS += $(GTK_LIBS)
 
GTK_CFLAGS := $(shell pkg-config --cflags gtk+-2.0)
GTK_LIBS := $(shell pkg-config --libs gtk+-2.0)
 
all: screenshot-tool
 
clean:
               rm -f screenshot-tool
 
install: screenshot-tool
               install -m755 -d $(DESTDIR)$(bindir)
               install -m755 screenshot-tool $(DESTDIR)$(bindir)/
 
distclean: clean
 
.PHONY: all clean distclean install
 
3 如何使用:
 
3-1: 如果把抓屏函数放到你的文件中一块编译,可以直接调用函数
 
void test_func1 (void)
{
    //...
    GError *error = NULL;
    screenshot (“test.png”, &error);
    //…
}
 
3-2: 如果把抓屏函数编译成可执行文件,放到了/usr/bin/目录下,项目中的模块可以这样用:
 
void test_func2 (void)
{
    //...
    char cmd[128] = {0};
    sprintf(cmd, "%s  %s", “usr/bin/screenshot-tool”, “test.png”);
    system(cmd);
    //…
}
 
第二种方法比较通用点。
 
当然,你也不能老用这个工具,结果抓了很多图片,很好,当心空间的问题啊,呵呵,别把空间给用光了;
 
如果考虑空间的话,可以给这个工具升级一下,判断当前flash剩余多少空间,如果小于预留的空间,就不保存了,这样会避开空间问题。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值