小编use*_*847的帖子

在Mac OS X上获取当前堆栈跟踪

我正在尝试研究如何在Mac OS X上的C++应用程序中存储然后打印当前堆栈.主要问题似乎是在主要可执行文件中给出一个地址时让dladdr返回正确的符号.我怀疑这个问题实际上是一个编译选项,但我不确定.

我已经尝试过来自Darwin/Leopard的回溯代码,但它调用了dladdr并且与我自己的代码调用dladdr有相同的问题.

原帖:目前我用这段代码捕获堆栈:

int BackTrace(Addr *buffer, int max_frames)
{
    void **frame = (void **)__builtin_frame_address(0);
    void **bp = ( void **)(*frame);
    void *ip = frame[1];
    int i;

    for ( i = 0; bp && ip && i < max_frames; i++ )
    {
        *(buffer++) = ip;
        ip = bp[1];
        bp = (void**)(bp[0]);
    }

    return i;
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.然后打印堆栈我正在使用这样的dladdr:

Dl_info dli;
if (dladdr(Ip, &dli))
{
    ptrdiff_t       offset;
    int c = 0;

    if (dli.dli_fname && dli.dli_fbase)
    {
        offset = (ptrdiff_t)Ip - (ptrdiff_t)dli.dli_fbase;
        c …
Run Code Online (Sandbox Code Playgroud)

macos backtrace

6
推荐指数
1
解决办法
1万
查看次数

在Mac OS X上以编程方式查找DNS服务器设置

我有一些跨平台的DNS客户端代码,我用它来做端到端SMTP和在Windows上我可以通过查看注册表找到当前的DNS服务器IP地址.在Mac上我可以使用第一个答案中提到的SystemConfiguration框架,但是这样做的确切方法并不是很明显.

例如,SCDynamicStoreCopyDHCPInfo返回一些动态DHCP相关数据,但不返回DNS服务器地址.

dns macos macos-carbon

4
推荐指数
4
解决办法
3969
查看次数

在非开发机器上运行vc2008 debug

我正在vc2008中构建我的应用程序并在机器网络上进行测试.

除了安装Visual Studio 2008之外,还有什么方法可以在另一台机器上运行C++程序的调试版本?(即没有安装vc2008)

安装redist软件包只会为vc2008程序安装发布模式支持DLL.目前它抱怨"此应用程序无法启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题.",我假设是"我缺少DLL"的代码.

debug-build visual-studio-2008 visual-studio

4
推荐指数
1
解决办法
4093
查看次数