digitalmars.D.announce - A new debugger for Linux - would it work for D?
- Cristian Vlasceanu (11/11) Nov 21 2006 Hi,
- Bill Baxter (6/20) Nov 21 2006 That would be fantastic.
- Cristian Vlasceanu (12/12) Nov 21 2006 Pardon my ignorance, what is GDC? The GNU implementation of D?
- Lutger (7/11) Nov 21 2006 I'm thinking about getting into linux and would appreciate the work, of
- Bill Baxter (8/9) Nov 21 2006 GDC uses the GCC backend to generate code.
- Carlos Santander (4/17) Nov 21 2006 --
- Bill Baxter (5/14) Nov 21 2006 Cool beans! (Not sure how I was supposed to know that, though, given
- John Reimer (6/13) Nov 21 2006 Are you sure? The svn revision I have on my computer is 41 and it hasn'...
- Carlos Santander (7/26) Nov 21 2006 branches/gdc-0.20-dev/d/ChangeLog :
- John Reimer (4/26) Nov 21 2006 my changelog doesn't say that... I must have downloaded a different bran...
- John Demme (25/39) Nov 21 2006 You would totally be my hero. I'm the one who wrote (and maintains) the...
- Cristian Vlasceanu (9/9) Nov 21 2006 D has a demangling scheme that is not compatible with C++?
- =?ISO-8859-1?Q?Thomas_K=FChne?= (391/393) Nov 21 2006 boundary="------------000509040909040507050301"
- Don Clugston (4/11) Nov 22 2006 Wow, it's interesting to compare yours with my compile-time demangler.
- Walter Bright (3/14) Nov 22 2006 Would you two care to take the best of both, and we can replace the
- Don Clugston (41/56) Nov 23 2006 I think there a couple of issues in the mangling algorithm which need to...
- Bruno Medeiros (11/35) Nov 23 2006 Can we define functions that do not have D linkage, but have D name
- Don Clugston (15/49) Nov 23 2006 These symbols cannot be externally linked directly, but it can be
- Frits van Bommel (9/17) Nov 23 2006 I have on several occasions declared functions as extern(C) in order to
- Thomas Kuehne (15/29) Nov 23 2006 -----BEGIN PGP SIGNED MESSAGE-----
- Bruno Medeiros (11/43) Nov 23 2006 Ah, got it. But in terms of calling convention, is outer.inner still of
- Frits van Bommel (5/10) Nov 23 2006 It might matter for something like DDL if it wants to call a function in...
- Thomas Kuehne (36/79) Nov 23 2006 -----BEGIN PGP SIGNED MESSAGE-----
- Don Clugston (5/84) Nov 23 2006 Agreed, I like that *much* better than my proposal.
- Thomas Kuehne (11/25) Nov 23 2006 -----BEGIN PGP SIGNED MESSAGE-----
- Walter Bright (2/3) Nov 23 2006 Thanks!
- Cristian Vlasceanu (11/11) Nov 23 2006 I owe a clarification (especially since some of you have posted code in ...
- Frits van Bommel (5/18) Nov 24 2006 Well, Thomas's code is GPL-with-exception, so you can link it to a
- Walter Bright (5/18) Nov 24 2006 It would be better for D users if support was built in, so it would work...
- BCS (2/21) Nov 24 2006 You could ship it with the plug in pre-installed.
- Cristian Vlasceanu (4/26) Nov 24 2006 Yes this is exactly what I have in mind, by "hooks and plugins" I meant...
- Cristian Vlasceanu (3/3) Nov 30 2006 Do you have any D code samples that confuse GDB? (bad line numbers, weir...
- John Reimer (5/20) Nov 21 2006 There would be a lot of support for that. Debuggers are an oft requeste...
- freeagle (3/31) Nov 22 2006 All current and future linux users coding in D would be very thankful,
- Craig Black (4/4) Nov 22 2006 Currently there is no debugger tailored for D, so this would be great an...
- Kristian Kilpi (3/7) Nov 22 2006 Oh, it would be really great to have a debugger! On Windows too (I'm usi...
- John Reimer (3/7) Nov 22 2006 Do they? I wouldn't say that anymore.
- freeagle (2/16) Nov 22 2006 could be interesting to somehow get those numbers
- John Reimer (3/17) Nov 22 2006 I agree.
Hi, I have written a Linux debugger (so far targeting C and C++) and from conversations with Walter and Andrei Alexandrescu emerged the idea of adapting it to support D. The areas that might need some not-so-trivial effort are the stack unwinding (as I understood from Walter, D sometimes uses stack frame layouts that may not be compatible with C) and the expression interpreter. Take a look, and if you think the investment in D is worthwhile I will give it a shot. Thank you, Cristian Vlasceanu (http://www.zero-bugs.com)
Nov 21 2006
Cristian Vlasceanu wrote:Hi, I have written a Linux debugger (so far targeting C and C++) and from conversations with Walter and Andrei Alexandrescu emerged the idea of adapting it to support D. The areas that might need some not-so-trivial effort are the stack unwinding (as I understood from Walter, D sometimes uses stack frame layouts that may not be compatible with C) and the expression interpreter. Take a look, and if you think the investment in D is worthwhile I will give it a shot. Thank you, Cristian Vlasceanu (http://www.zero-bugs.com)That would be fantastic. I'm primarily on Windows, but I'd probably fire up my VMWare Ubuntu install just to be able to use a decent D debugger. Would this be for GDC only? Or both DMD & GDC? --bb
Nov 21 2006
Pardon my ignorance, what is GDC? The GNU implementation of D? If that is the case, then the answer is that it depends on which side the work will be done, i.e. it might be the case that the compiler need be tweaked to generate DWARF to help the debugger, not just for the debugger to be extended to understand D. The way the debugger works to date is to look up for stack unwinding info (generated for C++ exception unwinding), and, if not found, it falls back to the "classical" linked list of frames approach, using the instruction pointer, stack pointer and frame register. I must admit I have not tried interoperating Zero and D, I just wanted to see if there is enough interest in the community to justify the work. Cristian
Nov 21 2006
Cristian Vlasceanu wrote:I must admit I have not tried interoperating Zero and D, I just wanted to see if there is enough interest in the community to justify the work. CristianI'm thinking about getting into linux and would appreciate the work, of course. Can't speak for other people, but I suspect most would like a good debugger for D very much. It seems like Zero is also designed for making it easier for other tools to use it, nice one. Good luck with development, I hope you will decide to make the effort.
Nov 21 2006
Cristian Vlasceanu wrote:Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date. That's about all I know. I don't know if they have different object formats or different formats for debug info. --bb
Nov 21 2006
Bill Baxter escribió:Cristian Vlasceanu wrote:Err... latest svn revision (41) puts gdc up with dmd 0.174...Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date.That's about all I know. I don't know if they have different object formats or different formats for debug info. --bb-- Carlos Santander Bernal
Nov 21 2006
Carlos Santander wrote:Bill Baxter escribió:Cool beans! (Not sure how I was supposed to know that, though, given that there hasn't been an announcement here, AFAIK. But great news nonetheless.) --bbCristian Vlasceanu wrote:Err... latest svn revision (41) puts gdc up with dmd 0.174...Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date.
Nov 21 2006
On Tue, 21 Nov 2006 19:47:52 -0800, Carlos Santander <csantander619 gmail.com> wrote:Bill Baxter escribió:Are you sure? The svn revision I have on my computer is 41 and it hasn't been updated for awhile now. I keep doing an "svn update" and there are no changes. Is there a different svn repository that I'm not aware of? -JJRCristian Vlasceanu wrote:Err... latest svn revision (41) puts gdc up with dmd 0.174...Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date.
Nov 21 2006
John Reimer escribió:On Tue, 21 Nov 2006 19:47:52 -0800, Carlos Santander <csantander619 gmail.com> wrote:branches/gdc-0.20-dev/d/ChangeLog : 2006-11-18 David Friedman <dvdfrdmn users.sf.net> Rest of DMD 0.174 merge: (etc) -- Carlos Santander BernalBill Baxter escribió:Are you sure? The svn revision I have on my computer is 41 and it hasn't been updated for awhile now. I keep doing an "svn update" and there are no changes. Is there a different svn repository that I'm not aware of? -JJRCristian Vlasceanu wrote:Err... latest svn revision (41) puts gdc up with dmd 0.174...Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date.
Nov 21 2006
On Tue, 21 Nov 2006 21:57:12 -0800, Carlos Santander <csantander619 gmail.com> wrote:John Reimer escribió:my changelog doesn't say that... I must have downloaded a different branch -JJROn Tue, 21 Nov 2006 19:47:52 -0800, Carlos Santander <csantander619 gmail.com> wrote:branches/gdc-0.20-dev/d/ChangeLog : 2006-11-18 David Friedman <dvdfrdmn users.sf.net> Rest of DMD 0.174 merge: (etc)Bill Baxter escribió:Are you sure? The svn revision I have on my computer is 41 and it hasn't been updated for awhile now. I keep doing an "svn update" and there are no changes. Is there a different svn repository that I'm not aware of? -JJRCristian Vlasceanu wrote:Err... latest svn revision (41) puts gdc up with dmd 0.174...Pardon my ignorance, what is GDC? The GNU implementation of D?GDC uses the GCC backend to generate code. DMD uses the Digtal Mars backend to generate code. GDC is out of date.
Nov 21 2006
Cristian Vlasceanu wrote:Hi, I have written a Linux debugger (so far targeting C and C++) and from conversations with Walter and Andrei Alexandrescu emerged the idea of adapting it to support D. The areas that might need some not-so-trivial effort are the stack unwinding (as I understood from Walter, D sometimes uses stack frame layouts that may not be compatible with C) and the expression interpreter. Take a look, and if you think the investment in D is worthwhile I will give it a shot. Thank you, Cristian Vlasceanu (http://www.zero-bugs.com)You would totally be my hero. I'm the one who wrote (and maintains) the GDB D patches project... so far it only supports D symbol demangling, and not even all that well. I haven't done more since GDB is bloody impossible to hack (as your website mentions.) DMD's DWARF output is incomplete (outright wrong sometimes, actually see bug think Walter will be much more inclined to add more DWARF support (and fix the existing support) if someone is actually developing a debugging program for D code and is willing to give him advice on the DWARF format (as I recall, he wasn't particularly excited about learning DWARF to initially implement the output.) In short, if Zero were to get good (or even better- great) D support, I'm pretty confident nearly every Linux D user would use it, and the Windows D users would be very jelous. BTW- I think Zero is a great idea. I haven't read over the entire web site yet, but I like it a lot. GDB sucks! Choice is great! Good luck with D. If you have any questions, I'm happy to answer them personally or feel free to post to the newsgroups here. The D community tends to be very friendly and helpful. You might also check out dsource.org for some tutorials and interesting D projects. -- ~John Demme me teqdruid.com http://www.teqdruid.com/
Nov 21 2006
D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger. The details of generating the correct DWARF output might be addressed by using the producer functions in Dave Anderson's libdwarf (http://reality.sgiweb.org/davea/dwarf.html). Zero uses the consumer side of that library and I am pleased with the results so far. Meanwhile I will try and educate myself some more wrt to D. Thank you kindly for your warm thoughts! It is also great to know that someone has explored these issues before.
Nov 21 2006
boundary="------------000509040909040507050301" This is a multi-part message in MIME format. --------------000509040909040507050301 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cristian Vlasceanu wrote:D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas --------------000509040909040507050301 Content-Type: application/zip; name="ddemangled.zip" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="ddemangled.zip" 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 DgAOADoEAADYSgAAAAA= --------------000509040909040507050301--
Nov 21 2006
Thomas Kühne wrote:Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas
Nov 22 2006
Don Clugston wrote:Thomas Kühne wrote:Would you two care to take the best of both, and we can replace the Phobos one?Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas
Nov 22 2006
Walter Bright wrote:Don Clugston wrote:I think there a couple of issues in the mangling algorithm which need to be addressed first. - The bug with local alias template parameters (depends on where it's instantiated from). mtype.c line 174-175, mangleChar[Tbit] = 'b'; mangleChar[Tbool] = 'x'; This should be changed so they are both 'b'. - Items that use D mangling but don't have D linkage. I suggest changing those cases to use "0" then the linkage type ('W' for Windows, 'U', for C, etc, same as for delegate/function pointers), then the length. So instead of main3abci it would be 0U4main3abci for void main() { int abc; } making it distinguishable from extern(Windows) { int main3abci; } - template floating point value parameters should use big-endian order (with exponent first) which would be moderately human-readable, instead of the current order, which makes no sense. expression.c line 1316 is currently for (int i = 0; i < REALSIZE-REALPAD; i++) buf->printf("%02x", p[i]); but should be for (int i = REALSIZE-REALPAD-1; i >=0; i--) buf->printf("%02x", p[i]); (Actually it would be even better if the implicit bit were stripped out for x86; that would make it more compatible across platforms, and would mean 0x1.123456789ABCDEDEp+0 would be mangled as: "3FFF123456789ABCDEDE" -- but proper cross-platform support needs a bit more thought).Thomas Kühne wrote:Would you two care to take the best of both, and we can replace the Phobos one?Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas
Nov 23 2006
Don Clugston wrote:- Items that use D mangling but don't have D linkage. I suggest changing those cases to use "0" then the linkage type ('W' for Windows, 'U', for C, etc, same as for delegate/function pointers), then the length. So instead of main3abci it would be 0U4main3abci for void main() { int abc; } making it distinguishable from extern(Windows) { int main3abci; }Can we define functions that do not have D linkage, but have D name mangling? If so, does that even make sense? It was my understanding that any function with linkage other than D is used for obj/lib/dll level compatibility with other programs written in other languages (i.e., ABI level compatibility). As such, these other languages don't understand D name mangling but only C name mangling, so what's a non-D-linkage with D-name-mangling for? -- Bruno Medeiros - MSc in CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Nov 23 2006
Bruno Medeiros wrote:Don Clugston wrote:These symbols cannot be externally linked directly, but it can be important for eg alias template parameters. (Everything needs to be manglable, even it can't be linked directly). extern(C) { void func() { // 'func' uses C name mangling void inner() { // 'inner' uses D name mangling. // So 'func.inner' is a hybrid. } } } It's even possible to have extern(Windows) inner functions inside extern(C) functions!- Items that use D mangling but don't have D linkage. I suggest changing those cases to use "0" then the linkage type ('W' for Windows, 'U', for C, etc, same as for delegate/function pointers), then the length. So instead of main3abci it would be 0U4main3abci for void main() { int abc; } making it distinguishable from extern(Windows) { int main3abci; }Can we define functions that do not have D linkage, but have D name mangling? If so, does that even make sense? It was my understanding that any function with linkage other than D is used for obj/lib/dll level compatibility with other programs written in other languages (i.e., ABI level compatibility). As such, these other languages don't understand D name mangling but only C name mangling, so what's a non-D-linkage with D-name-mangling for?
Nov 23 2006
Bruno Medeiros wrote:Can we define functions that do not have D linkage, but have D name mangling?Not as far as I know.If so, does that even make sense? It was my understanding that any function with linkage other than D is used for obj/lib/dll level compatibility with other programs written in other languages (i.e., ABI level compatibility). As such, these other languages don't understand D name mangling but only C name mangling, so what's a non-D-linkage with D-name-mangling for?I have on several occasions declared functions as extern(C) in order to be able to access them from inline assembly. I needed to be sure about the calling convention, and at that time the D calling convention wasn't documented as well as it is now. (http://www.digitalmars.com/d/abi.html) Name mangling is wholly irrelevant to this, though. In fact my backtraces would've looked better if all names had D mangling, so I would have liked name mangling to have been preserved.
Nov 23 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Frits van Bommel schrieb am 2006-11-23:Bruno Medeiros wrote:current mangling:Can we define functions that do not have D linkage, but have D name mangling?Not as far as I know.If so, does that even make sense? It was my understanding that any function with linkage other than D is used for obj/lib/dll level compatibility with other programs written in other languages (i.e., ABI level compatibility). As such, these other languages don't understand D name mangling but only C name mangling, so what's a non-D-linkage with D-name-mangling for?outer outer5innerFZvDon's proposal:outer 0U5outer5innerFZvThomas -----BEGIN PGP SIGNATURE----- iD8DBQFFZcg8LK5blCcjpWoRAu/hAJ9gADyqXbbt8xQXvZw+YD+hF0gbVQCgh8LT TfV4kEQMllZ7m4WFtNgSQNc= =gTTT -----END PGP SIGNATURE-----
Nov 23 2006
Thomas Kuehne wrote:-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Frits van Bommel schrieb am 2006-11-23:Ah, got it. But in terms of calling convention, is outer.inner still of regular D calling convention? (I think so, given some obj2asm tests I did) As for fixes, how about just mangling the inner function with a full D name mangling, treating the parent names as if they were D-mangled too?: _D4modl4funcFZv5innerFZv This way we (maybe) can't tell the calling convention of the parent functions... but does that matter? -- Bruno Medeiros - MSc in CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#DBruno Medeiros wrote:current mangling:Can we define functions that do not have D linkage, but have D name mangling?Not as far as I know.If so, does that even make sense? It was my understanding that any function with linkage other than D is used for obj/lib/dll level compatibility with other programs written in other languages (i.e., ABI level compatibility). As such, these other languages don't understand D name mangling but only C name mangling, so what's a non-D-linkage with D-name-mangling for?outer outer5innerFZvDon's proposal:outer 0U5outer5innerFZvThomas
Nov 23 2006
Bruno Medeiros wrote:As for fixes, how about just mangling the inner function with a full D name mangling, treating the parent names as if they were D-mangled too?: _D4modl4funcFZv5innerFZv This way we (maybe) can't tell the calling convention of the parent functions... but does that matter?It might matter for something like DDL if it wants to call a function in a dynamically-loaded module. It's kind of important to know the calling convention for that :). (Not sure if DDL currently does anything like this, but if not it might in the future)
Nov 23 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Don Clugston schrieb am 2006-11-23:Walter Bright wrote:<snip>Don Clugston wrote:I think there a couple of issues in the mangling algorithm which need to be addressed first.Thomas Kühne wrote:Would you two care to take the best of both, and we can replace the Phobos one?Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas- Items that use D mangling but don't have D linkage. I suggest changing those cases to use "0" then the linkage type ('W' for Windows, 'U', for C, etc, same as for delegate/function pointers), then the length. So instead of main3abci it would be 0U4main3abciI dislike unnecessary special cases: DMD-0.174 generates the following symbols (special cases are marked by an asterisk):_Class_4wood4Tree * _D4wood4Tree11_staticCtorFZv _D4wood4Tree5_dtorFZv _init_4wood4Tree * _modctor_4wood * outer outer6middleWZi * outer6middleWZi5innerFZv * _vtbl_4wood4Tree *I propose the following mangling:_D4wood4Tree9__Class__Pv _D4wood4Tree12__staticCtorFZv _D4wood4Tree6__dtorFZv _D4wood4Tree8__init__Pv _D4wood11__modctor__FZv outer _D4wood5outerFZv6middleWZi _D4wood5outerFZv6middleWZi5innerFZv _D4wood4Tree8__vtbl__AvThere are no special cases(identifiers starting with two underscores are reserved), thus no need for the demangler to know anything about the RT's internals. Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFFZhBmLK5blCcjpWoRAhvHAJ48XOpVGhQrtWqzUlnnSwWYa5ZctwCgiJ5g DU12Ih86ucKYv9td8e3iSJ0= =0YBV -----END PGP SIGNATURE-----
Nov 23 2006
Thomas Kuehne wrote:-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Don Clugston schrieb am 2006-11-23:Agreed, I like that *much* better than my proposal. BTW, unittest is another special case, and should be treated in the same way. - Don.Walter Bright wrote:<snip>Don Clugston wrote:I think there a couple of issues in the mangling algorithm which need to be addressed first.Thomas K�hne wrote:Would you two care to take the best of both, and we can replace the Phobos one?Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas- Items that use D mangling but don't have D linkage. I suggest changing those cases to use "0" then the linkage type ('W' for Windows, 'U', for C, etc, same as for delegate/function pointers), then the length. So instead of main3abci it would be 0U4main3abciI dislike unnecessary special cases: DMD-0.174 generates the following symbols (special cases are marked by an asterisk):_Class_4wood4Tree * _D4wood4Tree11_staticCtorFZv _D4wood4Tree5_dtorFZv _init_4wood4Tree * _modctor_4wood * outer outer6middleWZi * outer6middleWZi5innerFZv * _vtbl_4wood4Tree *I propose the following mangling:_D4wood4Tree9__Class__Pv _D4wood4Tree12__staticCtorFZv _D4wood4Tree6__dtorFZv _D4wood4Tree8__init__Pv _D4wood11__modctor__FZv outer _D4wood5outerFZv6middleWZi _D4wood5outerFZv6middleWZi5innerFZv _D4wood4Tree8__vtbl__AvThere are no special cases(identifiers starting with two underscores are reserved), thus no need for the demangler to know anything about the RT's internals.
Nov 23 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Walter Bright schrieb am 2006-11-22:Don Clugston wrote:http://d.puremagic.com/issues/show_bug.cgi?id=588 (though this doesn't handle any special cases) Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFFZhvWLK5blCcjpWoRAsfwAJ9V+CAQRZnDnXlkGZSFy2Lj0tD87wCfW22R Tsl/9CQuSO/6MQGbTbPmSdE= =G5tW -----END PGP SIGNATURE-----Thomas Kühne wrote:Would you two care to take the best of both, and we can replace the Phobos one?Cristian Vlasceanu wrote:Wow, it's interesting to compare yours with my compile-time demangler. They are both about the same number of lines of code (and both seem more comprehensive than the one in Phobos).D has a demangling scheme that is not compatible with C++? Then that's another area that needs work in the debugger.see attachment Thomas
Nov 23 2006
Thomas Kuehne wrote:http://d.puremagic.com/issues/show_bug.cgi?id=588Thanks!
Nov 23 2006
I owe a clarification (especially since some of you have posted code in response to my demangling question). Zero is NOT open source, and my long term intent is a commercially supported product (see some of my ramblings here: http://the-free-meme.blogspot.com/). Also I see a lot of domain knowledge wrt the inner workings of D in this forum. I thinks it would be a good idea (architecturally and ethically) that Zero provide hooks for D-supporting plugins and shared objects. Such modules could be open source themselves, or othewise licensed, as their respective authors see fit. The demangler for example is already based on a factory pattern (it deals with legacy gcc and the Itanium ABI), and delegating to a .so that implements D demangling would not be very hard to do.
Nov 23 2006
Cristian Vlasceanu wrote:I owe a clarification (especially since some of you have posted code in response to my demangling question). Zero is NOT open source, and my long term intent is a commercially supported product (see some of my ramblings here: http://the-free-meme.blogspot.com/).Well, Thomas's code is GPL-with-exception, so you can link it to a commercial program without any problem, as long as you distribute any modifications to his source.Also I see a lot of domain knowledge wrt the inner workings of D in this forum. I thinks it would be a good idea (architecturally and ethically) that Zero provide hooks for D-supporting plugins and shared objects. Such modules could be open source themselves, or othewise licensed, as their respective authors see fit. The demangler for example is already based on a factory pattern (it deals with legacy gcc and the Itanium ABI), and delegating to a .so that implements D demangling would not be very hard to do.That would work as well, of course.
Nov 24 2006
Frits van Bommel wrote:It would be better for D users if support was built in, so it would work out of the box with no hassle. Having the hooks for plugins, however, is still a very good idea and should be done. That will help future proof the debugger.I thinks it would be a good idea (architecturally and ethically) that Zero provide hooks for D-supporting plugins and shared objects. Such modules could be open source themselves, or othewise licensed, as their respective authors see fit. The demangler for example is already based on a factory pattern (it deals with legacy gcc and the Itanium ABI), and delegating to a .so that implements D demangling would not be very hard to do.That would work as well, of course.
Nov 24 2006
Walter Bright wrote:Frits van Bommel wrote:You could ship it with the plug in pre-installed.It would be better for D users if support was built in, so it would work out of the box with no hassle. Having the hooks for plugins, however, is still a very good idea and should be done. That will help future proof the debugger.I thinks it would be a good idea (architecturally and ethically) that Zero provide hooks for D-supporting plugins and shared objects. Such modules could be open source themselves, or othewise licensed, as their respective authors see fit. The demangler for example is already based on a factory pattern (it deals with legacy gcc and the Itanium ABI), and delegating to a .so that implements D demangling would not be very hard to do.That would work as well, of course.
Nov 24 2006
BCS wrote:Walter Bright wrote:Yes this is exactly what I have in mind, by "hooks and plugins" I meant to have the D support *dynamically* linked in, so that it can be upgraded or replaced without having to recompile the debugger.Frits van Bommel wrote:You could ship it with the plug in pre-installed.It would be better for D users if support was built in, so it would work out of the box with no hassle. Having the hooks for plugins, however, is still a very good idea and should be done. That will help future proof the debugger.I thinks it would be a good idea (architecturally and ethically) that Zero provide hooks for D-supporting plugins and shared objects. Such modules could be open source themselves, or othewise licensed, as their respective authors see fit. The demangler for example is already based on a factory pattern (it deals with legacy gcc and the Itanium ABI), and delegating to a .so that implements D demangling would not be very hard to do.That would work as well, of course.
Nov 24 2006
Do you have any D code samples that confuse GDB? (bad line numbers, weird stack unwinding, etc). - Cristian
Nov 30 2006
On Tue, 21 Nov 2006 15:50:30 -0800, Cristian Vlasceanu <cristian zero-bugs.com> wrote:Hi, I have written a Linux debugger (so far targeting C and C++) and from conversations with Walter and Andrei Alexandrescu emerged the idea of adapting it to support D. The areas that might need some not-so-trivial effort are the stack unwinding (as I understood from Walter, D sometimes uses stack frame layouts that may not be compatible with C) and the expression interpreter. Take a look, and if you think the investment in D is worthwhile I will give it a shot. Thank you, Cristian Vlasceanu (http://www.zero-bugs.com)There would be a lot of support for that. Debuggers are an oft requested feature for D. -JJR
Nov 21 2006
All current and future linux users coding in D would be very thankful, including me! John Reimer wrote:On Tue, 21 Nov 2006 15:50:30 -0800, Cristian Vlasceanu <cristian zero-bugs.com> wrote:Hi, I have written a Linux debugger (so far targeting C and C++) and from conversations with Walter and Andrei Alexandrescu emerged the idea of adapting it to support D. The areas that might need some not-so-trivial effort are the stack unwinding (as I understood from Walter, D sometimes uses stack frame layouts that may not be compatible with C) and the expression interpreter. Take a look, and if you think the investment in D is worthwhile I will give it a shot. Thank you, Cristian Vlasceanu (http://www.zero-bugs.com)There would be a lot of support for that. Debuggers are an oft requested feature for D. -JJR
Nov 22 2006
Currently there is no debugger tailored for D, so this would be great and appreciated by many. However, how difficult would it be to make this portable to Windows as well? Most D developers use Windows primarily. -Craig
Nov 22 2006
On Wed, 22 Nov 2006 21:05:00 +0200, Craig Black <cblack ara.com> wrote:Currently there is no debugger tailored for D, so this would be great and appreciated by many. However, how difficult would it be to make this portable to Windows as well? Most D developers use Windows primarily. -CraigOh, it would be really great to have a debugger! On Windows too (I'm using win).
Nov 22 2006
On Wed, 22 Nov 2006 11:05:00 -0800, Craig Black <cblack ara.com> wrote:Currently there is no debugger tailored for D, so this would be great and appreciated by many. However, how difficult would it be to make this portable to Windows as well? Most D developers use Windows primarily. -CraigDo they? I wouldn't say that anymore. -JJR
Nov 22 2006
John Reimer wrote:On Wed, 22 Nov 2006 11:05:00 -0800, Craig Black <cblack ara.com> wrote:could be interesting to somehow get those numbersCurrently there is no debugger tailored for D, so this would be great and appreciated by many. However, how difficult would it be to make this portable to Windows as well? Most D developers use Windows primarily. -CraigDo they? I wouldn't say that anymore. -JJR
Nov 22 2006
On Wed, 22 Nov 2006 14:52:20 -0800, freeagle <dalibor.free gmail.com> wrote:John Reimer wrote:I agree.On Wed, 22 Nov 2006 11:05:00 -0800, Craig Black <cblack ara.com> wrote:could be interesting to somehow get those numbersCurrently there is no debugger tailored for D, so this would be great and appreciated by many. However, how difficult would it be to make this portable to Windows as well? Most D developers use Windows primarily. -CraigDo they? I wouldn't say that anymore. -JJR
Nov 22 2006