2013-11-25 52 views
1

我正在使用Eclipse中的C項目(稱爲final_01),我的項目中有這樣的文件:main.c,XMLdataCatcher.c,crc .c和頭文件crc.h,我使用libxml2庫。在Eclipse中調試C程序:無法執行MI命令:-data-disassemble

我Eclipse編輯器顯示沒有錯誤,但是當我嘗試運行我不能,這是Eclipse調試器的輸出:

00000001: Failed to execute MI command: 
      -data-disassemble -s 1 -e 121 -- 1 
      Error message from debugger back end: 
      No se puede acceder a la memoria en la dirección 0x1 

其實有很多這樣的線,唯一「00000000」,「00000002」,「00000003」等等改變爲「00000001」,但是顯示給您的線條被突出顯示。

可能是什麼問題?我迷路了UU

這是我的makefile:

################################################################################ 
# Automatically-generated file. Do not edit! 
################################################################################ 

-include ../makefile.init 

RM := rm -rf 

# All of the sources participating in the build are defined here 
-include sources.mk 
-include subdir.mk 
-include objects.mk 

ifneq ($(MAKECMDGOALS),clean) 
ifneq ($(strip $(C_DEPS)),) 
-include $(C_DEPS) 
endif 
endif 

-include ../makefile.defs 

# Add inputs and outputs from these tool invocations to the build variables 

# All Target 
all: libfinal_01 

# Tool invocations 
libfinal_01: $(OBJS) $(USER_OBJS) 
    @echo 'Building target: [email protected]' 
    @echo 'Invoking: GCC C Linker' 
    gcc -nostartfiles -L/usr/include/libxml2/libxml -shared -o "libfinal_01" $(OBJS) $(USER_OBJS) $(LIBS) 
    @echo 'Finished building target: [email protected]' 
    @echo ' ' 

# Other Targets 
clean: 
    -$(RM) $(OBJS)$(C_DEPS)$(LIBRARIES) libfinal_01 
    [email protected] ' ' 

.PHONY: all clean dependents 
.SECONDARY: 

-include ../makefile.targets 

subdir.mk

################################################################################ 
# Automatically-generated file. Do not edit! 
################################################################################ 

# Add inputs and outputs from these tool invocations to the build variables 
C_SRCS += \ 
../crc.c \ 
../dataCatcherXML.c \ 
../main.c 

OBJS += \ 
./crc.o \ 
./dataCatcherXML.o \ 
./main.o 

C_DEPS += \ 
./crc.d \ 
./dataCatcherXML.d \ 
./main.d 


# Each subdirectory must supply rules for building sources it contributes 
%.o: ../%.c 
    @echo 'Building file: $<' 
    @echo 'Invoking: GCC C Compiler' 
    gcc -I/usr/include/libxml2/libxml -O0 -g3 -Wall -c -g -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "[email protected]" "$<" -I/usr/include/libxml2 -lxml2 -lz -lm 
    @echo 'Finished building: $<' 
    @echo ' ' 

main.o: ../main.c 
    @echo 'Building file: $<' 
    @echo 'Invoking: GCC C Compiler' 
    gcc -I/usr/include/libxml2/libxml -O0 -g3 -Wall -c -g -MMD -MP -MF"$(@:%.o=%.d)" -MT"main.d" -o "[email protected]" "$<" -I/usr/include/libxml2 -lxml2 -lz -lm 
    @echo 'Finished building: $<' 
    @echo ' ' 

這是main.c中

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <stdlib.h> 
#include <xmlmemory.h> 
#include "crc.h" 
#include <c14n.h> 
#include <catalog.h> 
#include <chvalid.h> 
#include <debugXML.h> 
#include <dict.h> 
#include <DOCBparser.h> 
#include <encoding.h> 
#include <entities.h> 
#include <globals.h> 
#include <hash.h> 
#include <HTMLparser.h> 
#include <HTMLtree.h> 
#include <list.h> 
#include <nanoftp.h> 
#include <nanohttp.h> 
#include <parser.h> 
#include <parserInternals.h> 
#include <pattern.h> 
#include <relaxng.h> 
#include <SAX.h> 
#include <SAX2.h> 
#include <schemasInternals.h> 
#include <schematron.h> 
#include <threads.h> 
#include <tree.h> 
#include <uri.h> 
#include <valid.h> 
#include <xinclude.h> 
#include <xlink.h> 
#include <xmlautomata.h> 
#include <xmlerror.h> 
#include <xmlexports.h> 
#include <xmlIO.h> 
#include <xmlmodule.h> 
#include <xmlreader.h> 
#include <xmlregexp.h> 
#include <xmlsave.h> 
#include <xmlschemas.h> 
#include <xmlschemastypes.h> 
#include <xmlstring.h> 
#include <xmlunicode.h> 
#include <xmlversion.h> 
#include <xmlwriter.h> 
#include <xpath.h> 
#include <xpathInternals.h> 
#include <xpointer.h> 

#define BIT_SINCRONIA 0X47 
#define PID_PAT 0X00 
#define table_pat 0x00 

FILE *fp2; 

int main() { 

    unsigned short bit_error = 0; 
    bit_error = bit_error << 15; 
    unsigned short init_payload = 1; 
    init_payload = init_payload << 14; 
    unsigned short transport_priority = 0; 
    transport_priority = transport_priority << 13; 
    unsigned short PID = PID_PAT; 

    PID = transport_priority^PID; 
    PID = bit_error^PID; 
    PID = PID^init_payload; 

    unsigned short PID1 = PID >> 8; 
    unsigned short PID2 = PID; 

    unsigned short cifrado_transporte = 0; 
    cifrado_transporte = cifrado_transporte << 6; 
    unsigned short campo_adaptacion = 1; 
    campo_adaptacion = campo_adaptacion << 4; 
    campo_adaptacion = campo_adaptacion^cifrado_transporte; 
    unsigned short contador_continuidad = 0; 
    contador_continuidad = contador_continuidad^campo_adaptacion; 

    unsigned short pointer_file = 0x00; 
    unsigned short table_tag = table_pat; 
    unsigned short contador_pmt = 2; 

    unsigned short longitud_final = (17 + 6 + contador_pmt) - 7; 
    unsigned short id_ts = 0xfeaa; 
    unsigned short identificador_nit_pat = 0x000; 

    if (table_tag == 0x0) { 

     unsigned char indica_seccion = 1; 
     indica_seccion = indica_seccion << 7; 
     unsigned char reservado = 3; 
     reservado = reservado << 4; 
     reservado = reservado^indica_seccion; 
     unsigned short longitud = longitud_final & 0xf00; 
     longitud = longitud >> 8; 
     longitud = longitud^reservado; 
     unsigned short longitud1 = longitud_final & 0x0ff; 
    unsigned short id_ts1 = id_ts & 0xff00; //0xfa ; 
     id_ts1 = id_ts1 >> 8; 
    unsigned short id_ts2 = id_ts & 0x00ff; 
    unsigned short version = 0x00; 
     version = version << 1; 
     version = version^0xc0; 

     unsigned short current_next = 1; 
     current_next = current_next^version; 
     unsigned short seccion_number = 0x00; 
     unsigned short last_seccion_number = 0x00; 

     unsigned short nit_id1 = 0; 
     unsigned short nit_id2 = 0; 

     unsigned short pid_nit1 = 0xe0; 
     unsigned short pid_nit2 = 0x10; 

     unsigned short pmt_id[contador_pmt]; 
     unsigned short pmt_pid[contador_pmt]; 

     pmt_id[1] = 0XAA; 
     pmt_pid[1] = 0X99; 

     pmt_id[2] = 0XBB; 
     pmt_pid[2] = 0X88; 


     unsigned char crc1 = 00; 
     unsigned char crc2 = 00; 
     unsigned char crc3 = 00; 
     unsigned char crc4 = 00; 

     unsigned char byte[189]; 

     byte[1] = BIT_SINCRONIA; 
     byte[2] = (char) PID1; 
     byte[3] = (char) PID2; 
     byte[4] = (char) contador_continuidad; 

     byte[5] = (char) pointer_file; 
     byte[6] = (char) table_tag; 

     byte[7] = (char) longitud; 
     byte[8] = (char) longitud1; 
     byte[9] = (char) id_ts1; 
     byte[10] = (char) id_ts2; 
     byte[11] = (char) current_next; 
     byte[12] = (char) seccion_number; 
     byte[13] = (char) last_seccion_number; 
     byte[14] = (char) nit_id1; 
     byte[15] = (char) nit_id2; 
     byte[16] = (char) pid_nit1; 
     byte[17] = (char) pid_nit2; 

     int i; 
     for (i = 1; i <= contador_pmt; i++) { 
      byte[17 + i] = (char) (pmt_id[i]); 
      byte[17 + 2 + i] = (char) (pmt_pid[i]); 
     } 

     printf("%i\n", (17 + 3 + contador_pmt - 1)); 

     char aux[1024] = ""; 
     fp2 = fopen("/home/practicante/ficheroprueba.txt", "w"); 
     for (i = 1; i < 22; i++) { 
      fputc(byte[i], fp2); 
      sprintf(aux + strlen(aux), "%x", byte[i]); 
      printf("\n%i aux es %s\n", i, aux); 
     } 
     unsigned long crc123 = crcFast(aux, strlen(aux)); 
     printf("The crcFast() is %X\n", crcFast(aux, strlen(aux))); 
     sprintf(aux + strlen(aux), "%X", crcFast(aux, strlen(aux))); 
     printf("\nTrama es %s\n", aux); 
     printf("ad %X", crc123); 

     crc1 = (crc123 & 0xff000000) >> 24; 
     crc2 = (crc123 & 0x00ff0000) >> 16; 
     crc3 = (crc123 & 0x0000ff00) >> 8; 
     crc4 = (crc123 & 0x000000ff); 
     fputc(crc1, fp2); 
     fputc(crc2, fp2); 
     fputc(crc3, fp2); 
     fputc(crc4, fp2); 
     fclose(fp2); 

    } 
    return 0; 

} 

這是datachcherxml.c

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <stdlib.h> 
#include <xmlmemory.h> 
#include "crc.h" 
#include <c14n.h> 
#include <catalog.h> 
#include <chvalid.h> 
#include <debugXML.h> 
#include <dict.h> 
#include <DOCBparser.h> 
#include <encoding.h> 
#include <entities.h> 
#include <globals.h> 
#include <hash.h> 
#include <HTMLparser.h> 
#include <HTMLtree.h> 
#include <list.h> 
#include <nanoftp.h> 
#include <nanohttp.h> 
#include <parser.h> 
#include <parserInternals.h> 
#include <pattern.h> 
#include <relaxng.h> 
#include <SAX.h> 
#include <SAX2.h> 
#include <schemasInternals.h> 
#include <schematron.h> 
#include <threads.h> 
#include <tree.h> 
#include <uri.h> 
#include <valid.h> 
#include <xinclude.h> 
#include <xlink.h> 
#include <xmlautomata.h> 
#include <xmlerror.h> 
#include <xmlexports.h> 
#include <xmlIO.h> 
#include <xmlmodule.h> 
#include <xmlreader.h> 
#include <xmlregexp.h> 
#include <xmlsave.h> 
#include <xmlschemas.h> 
#include <xmlschemastypes.h> 
#include <xmlstring.h> 
#include <xmlunicode.h> 
#include <xmlversion.h> 
#include <xmlwriter.h> 
#include <xpath.h> 
#include <xpathInternals.h> 
#include <xpointer.h> 

int XMLdataCatcher(int argc, char **argv) { 
    /* 
    * 
    * Declarando variables 
    * 
    * */ 
    xmlDocPtr doc; 
    xmlNodePtr root; 
    xmlNodePtr node; 
    xmlNodePtr children; 
    xmlNodePtr children2; 
    char bit_error[1024] = "as"; 

    /* 
    * 
    * Para leer el documento XML a través de internet esto NO SIRVE 
    * xmlParseFile (const char *filename); 
    * 
    * ESTO SI 
    * buffer = obtener_documento_xml("http://mi.servidor.com/gastos.xml"); 
    * doc = xmlParseMemory(buffer, strlen(buffer)); 
    * 
    * */ 
    doc = xmlParseFile("/home/practicante/XML/prueba1.xml"); 
    if (!doc) { 
     printf("Error al cargar documento XML\n"); 
    } 

    root = xmlDocGetRootElement(doc); 
    node = root->xmlChildrenNode; 
    while (node != NULL) { 
     children = node->xmlChildrenNode; 
     while (children != NULL) { 
      if (!(xmlStrcmp(node->name, "bit_error"))) { 
       printf("%s: %s\n", node->name, xmlNodeGetContent(node)); 
       printf("%s\n", bit_error); 
       strcpy(bit_error, xmlNodeGetContent(node)); 
       printf("%s\n", bit_error); 
      } 
      children2 = children->xmlChildrenNode; 
      while (children2 != NULL) { 
       printf("%s: %s\n", children->name, xmlNodeGetContent(children)); 
       children2 = children2->next; 
      } 
      children = children->next; 
     } 
     node = node->next; 
    } 

    printf("bit_error2 = %d", 1); 

    return (1); 
} 

對不起,太多的代碼和我的英語不好。

在此先感謝。

Ita

回答

0

您的代碼有幾個問題。首先,contador_pmt是2,你索引它是這樣的:從0開始,而不是1

unsigned short pmt_id[contador_pmt]; 
    unsigned short pmt_pid[contador_pmt]; 

    pmt_id[1] = 0XAA; 
    pmt_pid[1] = 0X99; 

    pmt_id[2] = 0XBB; 
    pmt_pid[2] = 0X88; 

C數組索引開始,所以用2的引用是不確定的。

其次,您無法檢查fopen()的返回值爲0.如果fopen()返回0,並且您嘗試在fputc()中使用它,您可能會得到一個seg故障。

如果你解決了這兩件事情,也許你的問題就會消失。儘管如此,你仍然需要進行大量的調試。祝你好運。