dgb로 디버깅할때 다음과 같은 에러가 발생합니다.
제가 디버깅 하려는 프로그램은 http//www.linuxtv.org 에 있는 szap이라는 프로그램 입니다.
컴파일은 다음과 같이 했습니다.
gcc szap.c -Wall -g -O2 -I../../include -I../lib -o szap ../lib/lnb.o
gdb로 디버깅 하기 위해서 $gdb ./szap
그리고 main 프로그램의 처음에 브레이크 포인트를 걸어놨습니다.
그리고 run 을 수행했습니다.
다음은 그때 발생한 에러 메세지 입니다.
(gdb)run
Starting program: /root/db/linuxtv-dvb-apps-1.1.0/szap/szap
Error while mapping shared library sections:
: Success.
Error while reading shared library symbols:
: No such file or dirctory.
Error while reading shared library symbols:
: No such file or dirctory.
Error while reading shared library symbols:
: No such file or dirctory.
Breakpoint 1, main( argc=1, argv=0xfeef4574) at szap.c:475
475 int list_channels = 0;
(gdb)
어떻게 해야 하는지요??
첨부 | 파일 크기 |
---|---|
szap.c | 13.66 KB |
Re: dgb로 디버깅할때 다음과 같은 에러가 발생합니다.
위에서 보면 몇가지 문제점이 보이는군요. 일단은 -O2 입니다. 디버깅할때는 최적화를 하면 인스트럭션이 달라져서 라인단위가 뒤죽박죽이 됩니다. 따라서 이를 빼주는게 맞고, 하지만 문제는 이게 아니라 gdb에서의 에러는 라이브러리를 찾지 못해서입니다. 실행은 제대로 됩니까? 실행조차 안된다면 관련 라이브러리를 설치하시고 실행되는것을 확인하시고, 실행은 되는데 안된다면 라이브러리 패스를 제대로 잡아주시고 하시기 바랍니다. LD_LIBRARY_PATH 말입니다.
또한 ../lib/lnb.o 도 제대로 -g 옵션으로 컴파일을 해주셔야 라인단위 디버깅이 가능합니다.
========================================
* The truth will set you free.
실행은 됩니다만 디버깅시에만 에러가 가는군요
실행은 됩니다만 디버깅시에만 에러가 가는군요
님이 말씀해 주신대로 최적화 옵션 빼도 계속 디버깅시 에러가 나는군요
그런데 소스에서 라이브러리 특별히 불러쓰는거 없는거 같은데 디버깅 하면 같은 에러 메세지가 뜹니다.
/////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/poll.h>
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/time.h>
#include <linux/dvb/frontend.h>
#include <linux/dvb/dmx.h>
#include "lnb.h"
<<<생략>>>
int main(int argc, char *argv[])
{
const char *home;
char chanfile[2 * PATH_MAX];
int list_channels = 0;
unsigned int chan_no = 0;
const char *chan_name = NULL;
unsigned int adapter = 0, frontend = 0, demux = 0, dvr = 0;
int opt, copt = 0;
lnb_type = *lnb_enum(0);
while ((opt = getopt(argc, argv, "hqrn:a:f:d:c:l:xi")) != -1) {
switch (opt)
{
case '?':
case 'h':
default:
bad_usage(argv[0], 0);
case 'q':
list_channels = 1;
break;
case 'r':
dvr = 1;
break;
case 'n':
chan_no = strtoul(optarg, NULL, 0);
break;
case 'a':
adapter = strtoul(optarg, NULL, 0);
break;
case 'f':
frontend = strtoul(optarg, NULL, 0);
break;
case 'd':
demux = strtoul(optarg, NULL, 0);
break;
case 'c':
copt = 1;
strncpy(chanfile, optarg, sizeof(chanfile));
break;
case 'l':
if (lnb_decode(optarg, &lnb_type) < 0) {
bad_usage(argv[0], 1);
return -1;
}
break;
case 'x':
exit_after_tuning = 1;
break;
case 'i':
interactive = 1;
exit_after_tuning = 1;
}
}
lnb_type.low_val *= 1000; /* convert to kiloherz */
lnb_type.high_val *= 1000; /* convert to kiloherz */
lnb_type.switch_val *= 1000; /* convert to kiloherz */
if (optind < argc)
chan_name = argv[optind];
if (chan_name && chan_no) {
bad_usage(argv[0], 0);
return -1;
}
if (list_channels && (chan_name || chan_no)) {
bad_usage(argv[0], 0);
return -1;
}
if (!list_channels && !chan_name && !chan_no && !interactive) {
bad_usage(argv[0], 0);
return -1;
}
if (!copt) {
if (!(home = getenv("HOME"))) {
fprintf(stderr, "error: $HOME not set\n");
return TRUE;
}
strncpy(chanfile, home, sizeof(chanfile));
strcat(chanfile, "/.szap/" CHANNEL_FILE);
}
printf("reading channels from file '%s'\n", chanfile);
if (!read_channels(chanfile, list_channels, chan_no, chan_name,
adapter, frontend, demux, dvr))
return TRUE;
return FALSE;
}
댓글 달기