From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4303 invoked by alias); 13 Jun 2011 06:33:22 -0000 Received: (qmail 4287 invoked by uid 22791); 13 Jun 2011 06:33:21 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RFC_ABUSE_POST,TW_DB X-Spam-Check-By: sourceware.org Received: from mail-pw0-f41.google.com (HELO mail-pw0-f41.google.com) (209.85.160.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 13 Jun 2011 06:33:05 +0000 Received: by pwi12 with SMTP id 12so2373649pwi.0 for ; Sun, 12 Jun 2011 23:33:04 -0700 (PDT) Received: by 10.142.247.22 with SMTP id u22mr784124wfh.232.1307946784198; Sun, 12 Jun 2011 23:33:04 -0700 (PDT) Received: from [210.32.145.228] ([210.32.145.228]) by mx.google.com with ESMTPS id x16sm5679533wfc.10.2011.06.12.23.32.59 (version=SSLv3 cipher=OTHER); Sun, 12 Jun 2011 23:33:02 -0700 (PDT) Message-ID: <4DF5AE48.9050202@gmail.com> Date: Mon, 13 Jun 2011 06:33:00 -0000 From: Asm warrior User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.19) Gecko/20081209 Thunderbird/2.0.0.19 Mnenhy/0.7.6.0 MIME-Version: 1.0 To: MinGW Users List , gdb@sourceware.org CC: "John E. / TDM" , Eli Zaretskii , jan.kratochvil@redhat.com, keiths@redhat.com Subject: Re: setting a breakpoint on a dll, relative path or absolute path issue References: <4DF31EB0.6080006@gmail.com> <4DF37ADA.3070905@users.sourceforge.net> <4DF4513A.3090902__7466.60719528354$1307866544$gmane$org@gmail.com> In-Reply-To: <4DF4513A.3090902__7466.60719528354$1307866544$gmane$org@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-06/txt/msg00090.txt.bz2 I just go a little further, and found that there is a function to look up a file name in symbol tables. struct symtab * lookup_symtab (const char *name) the parameter name is the user supplied file name string to set a breakpoint. This function will loop all the symbols and do a string match. symtab_to_fullname() is used to read symbol's filename, it was defined in the gdb/source.c line 1110 char * symtab_to_fullname (struct symtab *s) { int r; if (!s) return NULL; /* Don't check s->fullname here, the file could have been deleted/moved/..., look for it again. */ r = find_and_open_source (s->filename, s->dirname, &s->fullname); if (r >= 0) { close (r); return s->fullname; } return NULL; } When loop on the symbols. I found that at one loop, I get s->filename = "../../src/common/string.cpp" s->dirname = "D:\code\wxWidgets-2.8.12\build\msw" But too badly, the result s->fullname = "D:\code\wxWidgets-2.8.12\build\msw/../../src/common/string.cpp" This is the reason about the issue, if the result is: "D:\code\wxWidgets-2.8.12/src/common/string.cpp" Then, this problem can be fixed. I'm not sure why gdb does not give a cannical filename, but still leaves the "../../" in the result. By the way, gdb's matching algorithm care both "/" and "\" as equivalent char under Windows. Look at here: gdb\libiberty\filename_cmp.c int filename_cmp (const char *s1, const char *s2) { #ifndef HAVE_DOS_BASED_FILE_SYSTEM return strcmp(s1, s2); #else for (;;) { int c1 = TOLOWER (*s1); int c2 = TOLOWER (*s2); /* On DOS-based file systems, the '/' and the '\' are equivalent. */ if (c1 == '/') c1 = '\\'; if (c2 == '/') c2 = '\\'; if (c1 != c2) return (c1 - c2); if (c1 == '\0') return 0; s1++; s2++; } #endif } Asmwarrior ollydbg from codeblocks' forum