From: Koon-Seng Lim <koonseng@ctr.columbia.edu>
To: gdb@sources.redhat.com
Subject: Setting breakpoints in a virtual function on a dynamically loaded DLL
Date: Sun, 31 Mar 2002 16:53:00 -0000 [thread overview]
Message-ID: <000001c1d917$853ae830$9e01a8c0@rogue> (raw)
Hi,
I'm trying to set a breakpoint in a virtual function (new_foo::bar())
implemented in a DLL (testdll.dll) which I load dynamically from an .exe
(fooloader.exe). I get the following errors:
$ gdb fooloader.exe
...
(gdb) shared testdll.dll
(gdb)
(gdb) break new_foo::bar
Error: Cannot access memory at address 0x010001014
If I forcibly set a breakpoint at new_foo::bar using the GUI, I get an
error dialog that says "cannot insert breakpoint 1:" and the message
"Error: Cannot access memory at address 0x01000101e" in the console
window.
My question is:
1. Is there any way at all to set a breakpoint in the testdll.dll?
2. Did I doing something silly? The code is very simple and it steps
correctly under the MSVC debugger.
I'm running gdb 5.0 with the Insight GUI on cygwin 1.3.10 on a windows
box. Any help is greatly appreciated!!!
The 3 files listed below are compiled and linked using:
c++ -g -DVERBOSE -DWIN32 -DDLL_EXPORT -I. -c -o fooloader.o
fooloader.cpp
c++ -g -DVERBOSE -DWIN32 -DDLL_EXPORT -I. -c -o testdll.o testdll.cpp
c++ -shared -o testdll.dll -mwindows --export-all testdll.o
/lib/libstdc++.a
c++ -o fooloader.exe fooloader.o
--------------------------foo.h -------------------------
class foo {
public:
virtual void bar() = 0;
};
-----------------------testdll.cpp-----------------------
#include <stdio.h>
#include "foo.h"
#ifdef __cplusplus
extern "C" {
#endif
void *create_object();
#ifdef __cplusplus
}
#endif
class new_foo : foo {
public:
void bar();
};
void new_foo::bar() {
printf("in new_foo::bar()\n");
}
void *create_object() {
return (void *)new new_foo;
}
-----------------------fooloader.cpp------------------------
#include <windows.h>
#include "foo.h"
typedef void *(*CREATE_OBJECT)();
int main() {
HMODULE module = LoadLibrary("testdll.dll");
CREATE_OBJECT create_foo = (CREATE_OBJECT)GetProcAddress(module,
"create_object");
foo *my_foo = (foo *)(create_foo)();
my_foo->bar();
}
next reply other threads:[~2002-04-01 0:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-31 16:53 Koon-Seng Lim [this message]
2002-03-31 17:07 ` Daniel Jacobowitz
2002-03-31 18:22 ` Koon-Seng Lim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='000001c1d917$853ae830$9e01a8c0@rogue' \
--to=koonseng@ctr.columbia.edu \
--cc=gdb@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox