This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [windows] patch to set breakpoint in a dll
- From: Doug Evans <dje at google dot com>
- To: asmwarrior <asmwarrior at gmail dot com>
- Cc: gdb-patches at sourceware dot org, Chris Sutcliffe <ir0nh34d at gmail dot com>
- Date: Wed, 7 Mar 2012 10:46:39 -0800
- Subject: Re: [windows] patch to set breakpoint in a dll
- References: <4F54D758.8020508@gmail.com>
On Mon, Mar 5, 2012 at 7:10 AM, asmwarrior <asmwarrior@gmail.com> wrote:
> Hi, all. Several months ago, I have propose and discuss this issue, but now
> I see no progress, so I just give a "Ping" like post.
>
> The patch is quite simple. (see the attachment), currently, the patch is
> include in the MinGW's official gdb 7.4 release.
>
> Why we need this patch? It can let us debug dll(the dll is build with
> relative file path under GCC)
> The reason is below: this is my modified code
>
> int
> find_and_open_source (const char *filename,
> ? ? ? ? ? ? ? ? ? ? ?const char *dirname,
> ? ? ? ? ? ? ? ? ? ? ?char **fullname)
> {
> ?char *path = source_path;
> ?const char *p;
> ?int result;
> ?char *lpath;
>
> ?/* Quick way out if we already know its full name. ?*/
>
> ?if (*fullname)
> ? ?{
> ? ? ?/* The user may have requested that source paths be rewritten
> ? ? ? ? according to substitution rules he provided. ?If a substitution
> ? ? ? ? rule applies to this path, then apply it. ?*/
> ? ? ?char *rewritten_fullname = rewrite_source_path (*fullname);
>
> ? ? ?if (rewritten_fullname != NULL)
> ? ? ? ?{
> ? ? ? ? ?xfree (*fullname);
> ? ? ? ? ?*fullname = rewritten_fullname;
> ? ? ? ?}
>
> ? ? ?result = open (*fullname, OPEN_MODE);
> ? ? ?if (result >= 0)
> ? ? ?{
> ? ? ? ?lpath = gdb_realpath(*fullname);
> ? ? ? ?xfree(*fullname);
> ? ? ? ?*fullname = lpath;
> ? ? ? ?return result;
> ? ? ?}
> ? ? ?/* Didn't work -- free old one, try again. ?*/
> ? ? ?xfree (*fullname);
> ? ? ?*fullname = NULL;
> ? ?}
>
> Here,
> the *fullname =
> E:\code\cb\wx\wxWidgets-2.8.12\build\msw/../../src/common/string.cpp
>
> And you set the break point by using this command:
> break "E:/code/cb/wx/wxWidgets-2.8.12/src/common/string.cpp:164"
> Without the patch, GDB can not set the breakpoint, no file name matches.
>
> Luckily, the second break command works:
> break
> E:\code\cb\wx\wxWidgets-2.8.12\build\msw/../../src/common/string.cpp:164
> But I think no body will wrote such kind of file path specification.
>
>
> Now, In my patch, I add a function "gdb_realpath" which internally use
> Windows API GetFullPathName() to calculate the canonized path. So, with this
> patch, the first break command works.
>
> We have many discussion before:
> http://sourceware.org/ml/gdb/2011-06/msg00074.html
>
> Thanks.
The patch has a few nits that need to be fixed, but I like the idea:
have find_and_open_source consistently return the canonicalized path.
However, openp (called by find_and_open_source later on) uses
xfullpath, so for consistency I think that should be used here too
instead of gdb_realpath.
What do others think?